| OLD | NEW |
| (Empty) |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #ifndef CONTENT_CHILD_NAVIGATOR_CONNECT_NAVIGATOR_CONNECT_PROVIDER_H_ | |
| 6 #define CONTENT_CHILD_NAVIGATOR_CONNECT_NAVIGATOR_CONNECT_PROVIDER_H_ | |
| 7 | |
| 8 #include "base/compiler_specific.h" | |
| 9 #include "base/id_map.h" | |
| 10 #include "base/memory/ref_counted.h" | |
| 11 #include "content/child/worker_task_runner.h" | |
| 12 #include "third_party/WebKit/public/platform/WebNavigatorConnectProvider.h" | |
| 13 | |
| 14 class GURL; | |
| 15 | |
| 16 namespace base { | |
| 17 class SingleThreadTaskRunner; | |
| 18 } | |
| 19 | |
| 20 namespace blink { | |
| 21 class WebMessagePortChannel; | |
| 22 class WebString; | |
| 23 } | |
| 24 | |
| 25 namespace IPC { | |
| 26 class Message; | |
| 27 } | |
| 28 | |
| 29 namespace content { | |
| 30 class ThreadSafeSender; | |
| 31 struct TransferredMessagePort; | |
| 32 | |
| 33 // Main entry point for the navigator.connect API in a child process. This | |
| 34 // implements the blink API and passes connect calls on to the browser process. | |
| 35 // NavigatorConnectDispatcher receives IPCs from the browser process and passes | |
| 36 // them on to the correct thread specific instance of this class. | |
| 37 // The ThreadSpecificInstance method will return an instance of this class for | |
| 38 // the current thread, or create one if no instance exists yet for this thread. | |
| 39 // This class deletes itself if the worker thread it belongs to quits. | |
| 40 class NavigatorConnectProvider : public blink::WebNavigatorConnectProvider, | |
| 41 public WorkerTaskRunner::Observer { | |
| 42 public: | |
| 43 NavigatorConnectProvider( | |
| 44 ThreadSafeSender* thread_safe_sender, | |
| 45 const scoped_refptr<base::SingleThreadTaskRunner>& main_loop); | |
| 46 ~NavigatorConnectProvider(); | |
| 47 | |
| 48 // WebNavigatorConnectProvider implementation. | |
| 49 virtual void connect(const blink::WebURL& target_url, | |
| 50 const blink::WebString& origin, | |
| 51 blink::WebNavigatorConnectPortCallbacks* callbacks); | |
| 52 | |
| 53 void OnMessageReceived(const IPC::Message& msg); | |
| 54 | |
| 55 // |thread_safe_sender| and |main_loop| need to be passed in because if the | |
| 56 // call leads to construction they will be needed. | |
| 57 static NavigatorConnectProvider* ThreadSpecificInstance( | |
| 58 ThreadSafeSender* thread_safe_sender, | |
| 59 const scoped_refptr<base::SingleThreadTaskRunner>& main_loop); | |
| 60 | |
| 61 private: | |
| 62 void OnConnectResult(int thread_id, | |
| 63 int request_id, | |
| 64 const TransferredMessagePort& message_port, | |
| 65 int message_port_route_id, | |
| 66 bool allow_connect); | |
| 67 | |
| 68 // WorkerTaskRunner::Observer implementation. | |
| 69 void OnWorkerRunLoopStopped() override; | |
| 70 | |
| 71 scoped_refptr<ThreadSafeSender> thread_safe_sender_; | |
| 72 scoped_refptr<base::SingleThreadTaskRunner> main_loop_; | |
| 73 IDMap<blink::WebNavigatorConnectPortCallbacks, IDMapOwnPointer> requests_; | |
| 74 | |
| 75 DISALLOW_COPY_AND_ASSIGN(NavigatorConnectProvider); | |
| 76 }; | |
| 77 | |
| 78 } // namespace content | |
| 79 | |
| 80 #endif // CONTENT_CHILD_NAVIGATOR_CONNECT_NAVIGATOR_CONNECT_PROVIDER_H_ | |
| OLD | NEW |