diff options
Diffstat (limited to 'chromium/content/child/threaded_data_provider.h')
-rw-r--r-- | chromium/content/child/threaded_data_provider.h | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/chromium/content/child/threaded_data_provider.h b/chromium/content/child/threaded_data_provider.h new file mode 100644 index 00000000000..223153f414e --- /dev/null +++ b/chromium/content/child/threaded_data_provider.h @@ -0,0 +1,83 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CONTENT_CHILD_THREADEDDATAPROVIDER_IMPL_H_ +#define CONTENT_CHILD_THREADEDDATAPROVIDER_IMPL_H_ + +#include "base/compiler_specific.h" +#include "base/memory/linked_ptr.h" +#include "base/memory/ref_counted.h" +#include "base/memory/scoped_ptr.h" +#include "base/memory/shared_memory.h" +#include "base/memory/weak_ptr.h" +#include "ipc/ipc_channel.h" +#include "ipc/message_filter.h" + +namespace blink { +class WebThreadedDataReceiver; +} + +namespace IPC { +class SyncChannel; +} + +namespace webkit_glue { +class WebThreadImpl; +} + +namespace content { +class ResourceDispatcher; +class WebThreadImpl; + +class ThreadedDataProvider { + public: + ThreadedDataProvider( + int request_id, + blink::WebThreadedDataReceiver* threaded_data_receiver, + linked_ptr<base::SharedMemory> shm_buffer, + int shm_size); + virtual ~ThreadedDataProvider(); + + void Stop(); + void OnReceivedDataOnBackgroundThread(int data_offset, + int data_length, + int encoded_data_length); + + void OnReceivedDataOnForegroundThread(const char* data, + int data_length, + int encoded_data_length); + + void OnResourceMessageFilterAddedMainThread(); + + private: + void StopOnBackgroundThread(); + void OnResourceMessageFilterAddedBackgroundThread(); + void ForwardAndACKData(const char* data, int data_length); + + scoped_refptr<IPC::MessageFilter> filter_; + int request_id_; + linked_ptr<base::SharedMemory> shm_buffer_; + int shm_size_; + scoped_ptr<base::WeakPtrFactory<ThreadedDataProvider> > + background_thread_weak_factory_; + base::WeakPtrFactory<ThreadedDataProvider> + main_thread_weak_factory_; + WebThreadImpl& background_thread_; + IPC::SyncChannel* ipc_channel_; + blink::WebThreadedDataReceiver* threaded_data_receiver_; + bool resource_filter_active_; + base::MessageLoop* main_thread_message_loop_; + + struct QueuedSharedMemoryData { + const char* data; + int length; + }; + std::vector<QueuedSharedMemoryData> queued_data_; + + DISALLOW_COPY_AND_ASSIGN(ThreadedDataProvider); +}; + +} // namespace content + +#endif // CONTENT_CHILD_THREADEDDATAPROVIDER_IMPL_H_ |