Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(210)

Side by Side Diff: chrome_frame/chrome_active_document.h

Issue 218019: Initial import of the Chrome Frame codebase. Integration in chrome.gyp coming... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 11 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome_frame/bho.rgs ('k') | chrome_frame/chrome_active_document.bmp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2009 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_CHROME_ACTIVE_DOCUMENT_H_
6 #define CHROME_FRAME_CHROME_ACTIVE_DOCUMENT_H_
7
8 #include <atlbase.h>
9 #include <atlcom.h>
10 #include <atlctl.h>
11 #include <map>
12
13 #include "base/scoped_ptr.h"
14 #include "base/scoped_comptr_win.h"
15 #include "base/thread.h"
16
17 #include "chrome_frame/chrome_frame_activex_base.h"
18 #include "chrome_frame/com_type_info_holder.h"
19 #include "chrome_frame/find_dialog.h"
20 #include "chrome_frame/in_place_menu.h"
21 #include "chrome_frame/ole_document_impl.h"
22 #include "chrome_frame/resource.h"
23 #include "chrome_frame/extra_system_apis.h"
24
25 class Thread;
26 class TabProxy;
27 class ChromeActiveDocument;
28
29 // A call to IOleCommandTarget::Exec on the webbrowser with this command id
30 // and a command group of CGID_EXPLORER causes IE to finalize the current
31 // travel log entry and move to a new location (pruning any forward entries
32 // if needed)
33 #define INTERNAL_CMDID_FINALIZE_TRAVEL_LOG (38)
34
35 // To set the lock icon status call IOleCommandTarget::Exec on site with
36 // this command id and a command group of CGID_EXPLORER The in arg is one of
37 // the values: SECURELOCK_SET_UNSECURE, SECURELOCK_SET_MIXED,
38 // SECURELOCK_SET_SECURE128BIT etc declared in shdeprecated.h
39 #define INTERNAL_CMDID_SET_SSL_LOCK (37)
40
41 // A call to IOleCommandTarget::Exec on the webbrowser with this command id
42 // and a command group of CGID_EXPLORER causes IE to replace the URL in the
43 // current travel log entry
44 #define UNDOC_CMDID_REPLACE_CURRENT_TRAVEL_LOG_ENTRY_URL (40)
45
46 #define UNDOC_IE_CONTEXTMENU_ADDFAV (2261)
47 #define UNDOC_IE_CONTEXTMENU_VIEWSOURCE (2139)
48 #define UNDOC_IE_CONTEXTMENU_REFRESH (6042)
49
50 // This macro should be defined in the public section of the class.
51 #define BEGIN_EXEC_COMMAND_MAP(theClass) \
52 public: \
53 HRESULT ProcessExecCommand(const GUID* cmd_group_guid, DWORD command_id, \
54 DWORD cmd_exec_opt, VARIANT* in_args, \
55 VARIANT* out_args) { \
56 HRESULT hr = OLECMDERR_E_NOTSUPPORTED; \
57 switch (command_id) {
58
59
60 #define EXEC_COMMAND_HANDLER(id, handler) \
61 case id: { \
62 hr = S_OK; \
63 handler(cmd_group_guid, command_id, cmd_exec_opt, in_args, out_args) \
64 break; \
65 }
66
67 #define EXEC_COMMAND_HANDLER_NO_ARGS(id, handler) \
68 case id: { \
69 hr = S_OK; \
70 handler(); \
71 break; \
72 }
73
74 #define EXEC_COMMAND_HANDLER_GENERIC(id, code) \
75 case id: { \
76 hr = S_OK; \
77 code; \
78 break; \
79 }
80
81 #define END_EXEC_COMMAND_MAP() \
82 default: \
83 break; \
84 } \
85 return hr; \
86 }
87
88 // ChromeActiveDocument: Implementation of the Active Document object that is
89 // responsible for rendering pages in Chrome. This object delegates to
90 // Chrome.exe (via the Chrome IPC-based automation mechanism) for the actual
91 // rendering
92 class ATL_NO_VTABLE ChromeActiveDocument
93 : public ChromeFrameActivexBase<ChromeActiveDocument,
94 CLSID_ChromeActiveDocument>,
95 public IOleDocumentImpl<ChromeActiveDocument>,
96 public IOleDocumentViewImpl<ChromeActiveDocument>,
97 public IPersistMoniker,
98 public IOleCommandTarget,
99 public InPlaceMenu<ChromeActiveDocument>,
100 public IWebBrowserEventsUrlService {
101 public:
102 typedef ChromeFrameActivexBase<ChromeActiveDocument,
103 CLSID_ChromeActiveDocument> Base;
104 ChromeActiveDocument();
105 ~ChromeActiveDocument();
106
107 DECLARE_REGISTRY_RESOURCEID(IDR_CHROMEACTIVEDOCUMENT)
108
109 BEGIN_COM_MAP(ChromeActiveDocument)
110 COM_INTERFACE_ENTRY(IOleDocument)
111 COM_INTERFACE_ENTRY(IOleDocumentView)
112 COM_INTERFACE_ENTRY(IPersistMoniker)
113 COM_INTERFACE_ENTRY(IOleCommandTarget)
114 COM_INTERFACE_ENTRY(IWebBrowserEventsUrlService)
115 COM_INTERFACE_ENTRY_CHAIN(Base)
116 END_COM_MAP()
117
118 BEGIN_MSG_MAP(ChromeActiveDocument)
119 CHAIN_MSG_MAP(Base)
120 END_MSG_MAP()
121
122 HRESULT FinalConstruct();
123
124 #define FORWARD_TAB_COMMAND(id, command) \
125 EXEC_COMMAND_HANDLER_GENERIC(id, GetTabProxy() ? GetTabProxy()->command() : 1)
126
127 BEGIN_EXEC_COMMAND_MAP(ChromeActiveDocument)
128 EXEC_COMMAND_HANDLER_GENERIC(OLECMDID_PRINT, automation_client_->PrintTab())
129 EXEC_COMMAND_HANDLER_NO_ARGS(OLECMDID_FIND, OnFindInPage)
130 EXEC_COMMAND_HANDLER_NO_ARGS(UNDOC_IE_CONTEXTMENU_VIEWSOURCE, OnViewSource)
131 FORWARD_TAB_COMMAND(OLECMDID_SELECTALL, SelectAll)
132 FORWARD_TAB_COMMAND(OLECMDID_CUT, Cut)
133 FORWARD_TAB_COMMAND(OLECMDID_COPY, Copy)
134 FORWARD_TAB_COMMAND(OLECMDID_PASTE, Paste)
135 FORWARD_TAB_COMMAND(OLECMDID_REFRESH, ReloadAsync)
136 FORWARD_TAB_COMMAND(OLECMDID_STOP, StopAsync)
137 END_EXEC_COMMAND_MAP()
138
139 // IPCs from automation server.
140 virtual void OnNavigationStateChanged(int tab_handle, int flags,
141 const IPC::NavigationInfo& nav_info);
142 virtual void OnUpdateTargetUrl(int tab_handle,
143 const std::wstring& new_target_url);
144 virtual void OnAcceleratorPressed(int tab_handle, const MSG& accel_message);
145 virtual void OnTabbedOut(int tab_handle, bool reverse);
146 virtual void OnDidNavigate(int tab_handle,
147 const IPC::NavigationInfo& nav_info);
148
149 void OnFindInPage();
150
151 // Override DoVerb
152 STDMETHOD(DoVerb)(LONG verb,
153 LPMSG msg,
154 IOleClientSite* active_site,
155 LONG index,
156 HWND parent_window,
157 LPCRECT pos);
158 STDMETHOD(InPlaceDeactivate)(void);
159
160 // Override IOleInPlaceActiveObjectImpl::OnDocWindowActivate
161 STDMETHOD(OnDocWindowActivate)(BOOL activate);
162 STDMETHOD(TranslateAccelerator)(MSG* msg);
163
164 // IPersistMoniker methods
165 STDMETHOD(GetClassID)(CLSID* class_id);
166 STDMETHOD(IsDirty)();
167 STDMETHOD(GetCurMoniker)(IMoniker** moniker_name);
168 STDMETHOD(Load)(BOOL fully_avalable,
169 IMoniker* moniker_name,
170 LPBC bind_context,
171 DWORD mode);
172 STDMETHOD(Save)(IMoniker* moniker_name,
173 LPBC bind_context,
174 BOOL remember);
175 STDMETHOD(SaveCompleted)(IMoniker* moniker_name,
176 LPBC bind_context);
177
178 // IOleCommandTarget methods
179 STDMETHOD(QueryStatus)(const GUID* cmd_group_guid,
180 ULONG number_of_commands,
181 OLECMD commands[],
182 OLECMDTEXT* command_text);
183 STDMETHOD(Exec)(const GUID* cmd_group_guid, DWORD command_id,
184 DWORD cmd_exec_opt,
185 VARIANT* in_args,
186 VARIANT* out_args);
187
188 // IWebBrowserEventsUrlService methods
189 STDMETHOD(GetUrlForEvents)(BSTR* url);
190
191 // ChromeFrameActivexBase overrides
192 HRESULT IOleObject_SetClientSite(IOleClientSite* client_site);
193
194 HRESULT ActiveXDocActivate(LONG verb);
195
196 // Callbacks from ChromeFramePlugin<T>
197 bool PreProcessContextMenu(HMENU menu);
198 bool HandleContextMenuCommand(UINT cmd);
199
200 // Should connections initiated by this class try to block
201 // responses served with the X-Frame-Options header?
202 bool is_frame_busting_enabled();
203
204 protected:
205 // ChromeFrameActivexBase overrides
206 virtual void OnOpenURL(int tab_handle, const GURL& url_to_open,
207 int open_disposition);
208
209 virtual void OnLoad(int tab_handle, const GURL& url);
210
211 // A helper method that updates our internal navigation state
212 // as well as IE's navigation state (viz Title and current URL).
213 // The navigation_flags is a TabContents::InvalidateTypes enum
214 void UpdateNavigationState(const IPC::NavigationInfo& nav_info);
215
216 TabProxy* GetTabProxy() const {
217 if (automation_client_.get())
218 return automation_client_->tab();
219 return NULL;
220 }
221
222 // Exec command handlers
223 void OnViewSource();
224
225 // Call exec on our site's command target
226 HRESULT IEExec(const GUID* cmd_group_guid, DWORD command_id,
227 DWORD cmd_exec_opt, VARIANT* in_args, VARIANT* out_args);
228
229 protected:
230 typedef std::map<int, bool> EnabledCommandsMap;
231
232 IPC::NavigationInfo navigation_info_;
233 bool is_doc_object_;
234
235 // This indicates whether this is the first navigation in this
236 // active document. It is initalize to true and it is set to false
237 // after we get a navigation notification from Chrome
238 bool first_navigation_;
239
240 // Our find dialog
241 CFFindDialog find_dialog_;
242
243 // Contains the list of enabled commands ids.
244 EnabledCommandsMap enabled_commands_map_;
245
246 // Set to true if the automation_client_ member is initialized from
247 // an existing ChromeActiveDocument instance which is going away and
248 // a new ChromeActiveDocument instance is taking its place.
249 bool is_automation_client_reused_;
250
251 public:
252 ScopedComPtr<IOleInPlaceFrame> in_place_frame_;
253 OLEINPLACEFRAMEINFO frame_info_;
254 };
255
256 OBJECT_ENTRY_AUTO(__uuidof(ChromeActiveDocument), ChromeActiveDocument)
257
258 #endif // CHROME_FRAME_CHROME_ACTIVE_DOCUMENT_H_
OLDNEW
« no previous file with comments | « chrome_frame/bho.rgs ('k') | chrome_frame/chrome_active_document.bmp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698