1f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// found in the LICENSE file. 4f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 5f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#ifndef CONTENT_CHILD_THREADEDDATAPROVIDER_IMPL_H_ 6f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#define CONTENT_CHILD_THREADEDDATAPROVIDER_IMPL_H_ 7f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 8f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "base/compiler_specific.h" 9f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "base/memory/linked_ptr.h" 10f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "base/memory/ref_counted.h" 11f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 12f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "base/memory/shared_memory.h" 13f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "base/memory/weak_ptr.h" 14f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "ipc/ipc_channel.h" 15f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "ipc/message_filter.h" 16f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 17f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)namespace blink { 18f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class WebThreadedDataReceiver; 19f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 20f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 21f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)namespace IPC { 22f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class SyncChannel; 23f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 24f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 25f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)namespace content { 26f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class WebThreadImpl; 27f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 28f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class ThreadedDataProvider { 29f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) public: 30f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ThreadedDataProvider( 31f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) int request_id, 32f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) blink::WebThreadedDataReceiver* threaded_data_receiver, 33f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) linked_ptr<base::SharedMemory> shm_buffer, 34f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) int shm_size); 35f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual ~ThreadedDataProvider(); 36f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 37f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void Stop(); 38f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void OnReceivedDataOnBackgroundThread(int data_offset, 39f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) int data_length, 40f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) int encoded_data_length); 41f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 42f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void OnReceivedDataOnForegroundThread(const char* data, 43f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) int data_length, 44f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) int encoded_data_length); 45f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 46f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void OnResourceMessageFilterAddedMainThread(); 47f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 48f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) private: 49f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void StopOnBackgroundThread(); 50f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void OnResourceMessageFilterAddedBackgroundThread(); 51f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void ForwardAndACKData(const char* data, int data_length); 52f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 53f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_refptr<IPC::MessageFilter> filter_; 54f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) int request_id_; 55f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) linked_ptr<base::SharedMemory> shm_buffer_; 56f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) int shm_size_; 57f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_ptr<base::WeakPtrFactory<ThreadedDataProvider> > 58f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) background_thread_weak_factory_; 59f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) WebThreadImpl& background_thread_; 60f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) IPC::SyncChannel* ipc_channel_; 61f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) blink::WebThreadedDataReceiver* threaded_data_receiver_; 62f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) bool resource_filter_active_; 63f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::MessageLoop* main_thread_message_loop_; 64f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 65f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) struct QueuedSharedMemoryData { 66f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const char* data; 67f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) int length; 68f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) }; 69f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::vector<QueuedSharedMemoryData> queued_data_; 70f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::WeakPtrFactory<ThreadedDataProvider> 721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci main_thread_weak_factory_; 731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 74f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(ThreadedDataProvider); 75f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}; 76f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 77f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} // namespace content 78f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 79f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#endif // CONTENT_CHILD_THREADEDDATAPROVIDER_IMPL_H_ 80