| // 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_ |