OLD | NEW |
| (Empty) |
1 // Copyright (c) 2011 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 CHROME_FRAME_CFPROXY_H_ | |
6 #define CHROME_FRAME_CFPROXY_H_ | |
7 #pragma once | |
8 | |
9 #include <windows.h> | |
10 | |
11 #include <map> // for proxy factory | |
12 #include <vector> | |
13 #include <string> | |
14 | |
15 #include "base/synchronization/lock.h" | |
16 #include "base/time.h" // for base::TimeDelta | |
17 #include "base/file_path.h" | |
18 #include "chrome/common/automation_constants.h" | |
19 #include "content/public/common/page_zoom.h" | |
20 #include "ipc/ipc_channel.h" | |
21 | |
22 class ChromeProxyDelegate; | |
23 class ChromeProxyFactory; | |
24 class GURL; | |
25 struct ExternalTabSettings; | |
26 struct ProxyParams; | |
27 | |
28 // Some callers of synchronous messages wants a context to be passed back | |
29 // in order to identify the call they made. Presumably one can make | |
30 // multiple sync calls of same type (as async) and want to identify what | |
31 // is what. | |
32 struct SyncMessageContext { | |
33 virtual ~SyncMessageContext() {} | |
34 }; | |
35 | |
36 | |
37 /* | |
38 [activex] UIDelegate (UI_THREAD) | |
39 [activedoc] <---------------+ | |
40 | | |
41 | ChromeProxy (UI_THREAD) | |
42 +----------------+ --------------> +-------+ | |
43 URL_FETCHER <---------|ExternalTabProxy| |CFProxy| | |
44 +----------------+ +-------+ | |
45 | | |
46 ^ | | |
47 | | | |
48 +-----------------------------+ | |
49 | |
50 ChromeProxyDelegate (IPC_THREAD) | |
51 | |
52 */ | |
53 | |
54 // ChromeProxy is an abstract class. Is forwards the commands to an | |
55 // instance of the running Chromium browser. | |
56 // A pointer to ChromeProxy instance is obtained through a | |
57 // ChromeProxyFactory object. | |
58 class ChromeProxy { | |
59 public: | |
60 // General | |
61 virtual void RemoveBrowsingData(int remove_mask) = 0; // async | |
62 virtual void SetProxyConfig(const std::string& json_encoded_settings) = 0; | |
63 | |
64 // Tab management. | |
65 virtual void CreateTab(ChromeProxyDelegate* delegate, | |
66 const ExternalTabSettings& settings) = 0; | |
67 virtual void ConnectTab(ChromeProxyDelegate* delegate, HWND hwnd, | |
68 uint64 cookie) = 0; | |
69 virtual void BlockTab(uint64 cookie) = 0; | |
70 | |
71 // Tab related. | |
72 virtual void Tab_PostMessage(int tab, const std::string& message, | |
73 const std::string& origin, | |
74 const std::string& target) = 0; | |
75 virtual void Tab_Reload(int tab) = 0; | |
76 virtual void Tab_Stop(int tab) = 0; | |
77 virtual void Tab_SaveAs(int tab) = 0; | |
78 virtual void Tab_Print(int tab) = 0; | |
79 virtual void Tab_Cut(int tab) = 0; | |
80 virtual void Tab_Copy(int tab) = 0; | |
81 virtual void Tab_Paste(int tab) = 0; | |
82 virtual void Tab_SelectAll(int tab) = 0; | |
83 virtual void Tab_Find(int tab, const string16& search_string, | |
84 FindInPageDirection forward, FindInPageCase match_case, | |
85 bool find_next) = 0; | |
86 virtual void Tab_MenuCommand(int tab, int selected_command) = 0; | |
87 | |
88 // UI | |
89 virtual void Tab_Zoom(int tab, content::PageZoom zoom_level) = 0; | |
90 virtual void Tab_FontSize(int tab, enum AutomationPageFontSize font_size) = 0; | |
91 virtual void Tab_SetInitialFocus(int tab, | |
92 bool reverse, bool restore_focus_to_view) = 0; | |
93 virtual void Tab_SetParentWindow(int tab) = 0; | |
94 virtual void Tab_Resize(int tab) = 0; | |
95 virtual void Tab_ProcessAccelerator(int tab, const MSG& msg) = 0; | |
96 | |
97 // Misc. | |
98 virtual void Tab_OnHostMoved(int tab) = 0; | |
99 virtual void Tab_RunUnloadHandlers(int tab) = 0; | |
100 virtual void Tab_Navigate(int tab, const GURL& url, const GURL& referrer) = 0; | |
101 virtual void Tab_OverrideEncoding(int tab, const char* encoding) = 0; | |
102 | |
103 protected: | |
104 // Accessible by ChromeProxyFactory | |
105 friend class ChromeProxyFactory; | |
106 virtual ~ChromeProxy() {} | |
107 virtual void Init(const ProxyParams& params) = 0; | |
108 virtual int AddDelegate(ChromeProxyDelegate* delegate) = 0; | |
109 virtual int RemoveDelegate(ChromeProxyDelegate* delegate) = 0; | |
110 }; | |
111 | |
112 // The object that uses ChromeProxy should implement ChromeProxyDelegate in | |
113 // order to get notified about important events/requests coming from the | |
114 // instance of Chromium. | |
115 // Allow only one delegate per tab, i.e. delegate can handle only a single tab. | |
116 // Note: all of the methods are invoked always in a background IPC thread. | |
117 class ChromeProxyDelegate : public IPC::Channel::Listener { | |
118 public: | |
119 enum DisconnectReason { | |
120 CHROME_EXE_LAUNCH_FAILED, | |
121 CHROME_EXE_LAUNCH_TIMEOUT, | |
122 CHANNEL_ERROR | |
123 }; | |
124 | |
125 virtual void Connected(ChromeProxy* proxy) = 0; | |
126 virtual void Disconnected() = 0; | |
127 virtual void PeerLost(ChromeProxy* proxy, DisconnectReason reason) = 0; | |
128 virtual int tab_handle() = 0; // to avoid reverse lookup :) | |
129 | |
130 // Sync message responses. | |
131 virtual void Completed_CreateTab(bool success, HWND chrome_wnd, | |
132 HWND tab_window, int tab_handle, int session_id) = 0; | |
133 virtual void Completed_ConnectToTab(bool success, HWND chrome_window, | |
134 HWND tab_window, int tab_handle, int session_id) = 0; | |
135 virtual void Completed_Navigate(bool success, | |
136 enum AutomationMsg_NavigationResponseValues res) = 0; | |
137 | |
138 protected: | |
139 ~ChromeProxyDelegate() {} | |
140 }; | |
141 | |
142 // a way to obtain a ChromeProxy implementation | |
143 struct ProxyParams { | |
144 std::string profile; | |
145 std::wstring extra_params; | |
146 FilePath profile_path; | |
147 base::TimeDelta timeout; | |
148 }; | |
149 | |
150 class ChromeProxyFactory { | |
151 public: | |
152 ChromeProxyFactory(); | |
153 ~ChromeProxyFactory(); | |
154 void GetProxy(ChromeProxyDelegate* delegate, const ProxyParams& params); | |
155 bool ReleaseProxy(ChromeProxyDelegate* delegate, const std::string& profile); | |
156 protected: | |
157 virtual ChromeProxy* CreateProxy(); | |
158 typedef std::map<std::string, ChromeProxy*> ProxyMap; | |
159 ProxyMap proxies_; | |
160 base::Lock lock_; | |
161 }; | |
162 | |
163 #endif // CHROME_FRAME_CFPROXY_H_ | |
OLD | NEW |