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

Side by Side Diff: chrome/browser/ui/views/external_tab_container_win.h

Issue 12220101: Minimal Chrome Frame with Aura. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: removed inclusion of web_contents_view.h from automation_provider_win.h. see patch set 5 for trybot… Created 7 years, 9 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef CHROME_BROWSER_UI_VIEWS_EXTERNAL_TAB_CONTAINER_WIN_H_ 5 #ifndef CHROME_BROWSER_UI_VIEWS_EXTERNAL_TAB_CONTAINER_WIN_H_
6 #define CHROME_BROWSER_UI_VIEWS_EXTERNAL_TAB_CONTAINER_WIN_H_ 6 #define CHROME_BROWSER_UI_VIEWS_EXTERNAL_TAB_CONTAINER_WIN_H_
7 7
8 #include <map> 8 #include <map>
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
11 11
12 #include "base/compiler_specific.h" 12 #include "base/compiler_specific.h"
13 #include "base/lazy_instance.h" 13 #include "base/lazy_instance.h"
14 #include "base/memory/scoped_ptr.h" 14 #include "base/memory/scoped_ptr.h"
15 #include "base/memory/weak_ptr.h" 15 #include "base/memory/weak_ptr.h"
16 #include "chrome/browser/automation/automation_resource_message_filter.h" 16 #include "chrome/browser/automation/automation_resource_message_filter.h"
17 #include "chrome/browser/external_tab/external_tab_container.h" 17 #include "chrome/browser/external_tab/external_tab_container.h"
18 #include "chrome/browser/infobars/infobar_container.h" 18 #include "chrome/browser/infobars/infobar_container.h"
19 #include "chrome/browser/net/chrome_url_request_context.h" 19 #include "chrome/browser/net/chrome_url_request_context.h"
20 #include "chrome/browser/ui/blocked_content/blocked_content_tab_helper_delegate. h" 20 #include "chrome/browser/ui/blocked_content/blocked_content_tab_helper_delegate. h"
21 #include "chrome/browser/ui/views/unhandled_keyboard_event_handler.h" 21 #include "chrome/browser/ui/views/unhandled_keyboard_event_handler.h"
22 #include "content/public/browser/navigation_type.h" 22 #include "content/public/browser/navigation_type.h"
23 #include "content/public/browser/notification_observer.h" 23 #include "content/public/browser/notification_observer.h"
24 #include "content/public/browser/notification_registrar.h" 24 #include "content/public/browser/notification_registrar.h"
25 #include "content/public/browser/web_contents_delegate.h" 25 #include "content/public/browser/web_contents_delegate.h"
26 #include "content/public/browser/web_contents_observer.h" 26 #include "content/public/browser/web_contents_observer.h"
27 #include "ui/base/accelerators/accelerator.h" 27 #include "ui/base/accelerators/accelerator.h"
28 #include "ui/views/widget/native_widget_win.h" 28 #include "ui/views/widget/widget_observer.h"
29 29
30 class AutomationProvider; 30 class AutomationProvider;
31 class Browser; 31 class Browser;
32 class Profile; 32 class Profile;
33 class TabContentsContainer; 33 class TabContentsContainer;
34 class RenderViewContextMenuViews; 34 class RenderViewContextMenuViews;
35 struct NavigationInfo; 35 struct NavigationInfo;
36 36
37 namespace ui { 37 namespace ui {
38 class ViewProp; 38 class ViewProp;
39 } 39 }
40 40
41 namespace views { 41 namespace views {
42 class View;
42 class WebView; 43 class WebView;
44 class Widget;
43 } 45 }
44 46
45 // This class serves as the container window for an external tab. 47 // This class serves as the container window for an external tab.
46 // An external tab is a Chrome tab that is meant to displayed in an 48 // An external tab is a Chrome tab that is meant to displayed in an
47 // external process. This class provides the FocusManger needed by the 49 // external process. This class provides the FocusManger needed by the
48 // WebContents as well as an implementation of content::WebContentsDelegate. 50 // WebContents as well as an implementation of content::WebContentsDelegate.
49 class ExternalTabContainerWin : public ExternalTabContainer, 51 class ExternalTabContainerWin : public ExternalTabContainer,
50 public content::WebContentsDelegate, 52 public content::WebContentsDelegate,
51 public content::WebContentsObserver, 53 public content::WebContentsObserver,
52 public content::NotificationObserver, 54 public content::NotificationObserver,
53 public views::NativeWidgetWin, 55 public views::WidgetObserver,
54 public ui::AcceleratorTarget, 56 public ui::AcceleratorTarget,
55 public InfoBarContainer::Delegate, 57 public InfoBarContainer::Delegate,
56 public BlockedContentTabHelperDelegate { 58 public BlockedContentTabHelperDelegate {
57 public: 59 public:
58 typedef std::map<uintptr_t, 60 typedef std::map<uintptr_t,
59 scoped_refptr<ExternalTabContainerWin> > PendingTabs; 61 scoped_refptr<ExternalTabContainerWin> > PendingTabs;
60 62
61 ExternalTabContainerWin(AutomationProvider* automation, 63 ExternalTabContainerWin(AutomationProvider* automation,
62 AutomationResourceMessageFilter* filter); 64 AutomationResourceMessageFilter* filter);
63 65
64 static scoped_refptr<ExternalTabContainer> RemovePendingExternalTab( 66 static scoped_refptr<ExternalTabContainer> RemovePendingExternalTab(
65 uintptr_t cookie); 67 uintptr_t cookie);
66 68
67 // Overridden from ExternalTabContainer: 69 // Overridden from ExternalTabContainer:
68 virtual bool Init(Profile* profile, 70 virtual bool Init(Profile* profile,
69 HWND parent, 71 HWND parent,
70 const gfx::Rect& bounds, 72 const gfx::Rect& bounds,
71 DWORD style, 73 DWORD style,
72 bool load_requests_via_automation, 74 bool load_requests_via_automation,
73 bool handle_top_level_requests, 75 bool handle_top_level_requests,
74 content::WebContents* existing_contents, 76 content::WebContents* existing_contents,
75 const GURL& initial_url, 77 const GURL& initial_url,
76 const GURL& referrer, 78 const GURL& referrer,
77 bool infobars_enabled, 79 bool infobars_enabled,
78 bool supports_full_tab_mode) OVERRIDE; 80 bool supports_full_tab_mode) OVERRIDE;
79 virtual void Uninitialize() OVERRIDE; 81 virtual void Uninitialize() OVERRIDE;
80 virtual bool Reinitialize(AutomationProvider* automation_provider, 82 virtual bool Reinitialize(AutomationProvider* automation_provider,
81 AutomationResourceMessageFilter* filter, 83 AutomationResourceMessageFilter* filter,
82 gfx::NativeWindow parent_window) OVERRIDE; 84 HWND parent_window) OVERRIDE;
83 virtual content::WebContents* GetWebContents() const OVERRIDE; 85 virtual content::WebContents* GetWebContents() const OVERRIDE;
84 virtual gfx::NativeView GetExternalTabNativeView() const OVERRIDE; 86 virtual HWND GetExternalTabHWND() const OVERRIDE;
87 virtual HWND GetContentHWND() const OVERRIDE;
85 virtual void SetTabHandle(int handle) OVERRIDE; 88 virtual void SetTabHandle(int handle) OVERRIDE;
86 virtual int GetTabHandle() const OVERRIDE; 89 virtual int GetTabHandle() const OVERRIDE;
87 virtual bool ExecuteContextMenuCommand(int command) OVERRIDE; 90 virtual bool ExecuteContextMenuCommand(int command) OVERRIDE;
88 virtual void RunUnloadHandlers(IPC::Message* reply_message) OVERRIDE; 91 virtual void RunUnloadHandlers(IPC::Message* reply_message) OVERRIDE;
89 virtual void ProcessUnhandledAccelerator(const MSG& msg) OVERRIDE; 92 virtual void ProcessUnhandledAccelerator(const MSG& msg) OVERRIDE;
90 virtual void FocusThroughTabTraversal(bool reverse, 93 virtual void FocusThroughTabTraversal(bool reverse,
91 bool restore_focus_to_view) OVERRIDE; 94 bool restore_focus_to_view) OVERRIDE;
92 95
93 // A helper method that tests whether the given window is an
94 // ExternalTabContainerWin window.
95 static bool IsExternalTabContainer(HWND window);
96
97 // A helper function that returns a pointer to the ExternalTabContainerWin
98 // instance associated with a native view. Returns NULL if the window
99 // is not an ExternalTabContainerWin.
100 static ExternalTabContainer* GetExternalContainerFromNativeWindow(
101 gfx::NativeView native_window);
102
103 // Overridden from content::WebContentsDelegate: 96 // Overridden from content::WebContentsDelegate:
104 virtual content::WebContents* OpenURLFromTab( 97 virtual content::WebContents* OpenURLFromTab(
105 content::WebContents* source, 98 content::WebContents* source,
106 const content::OpenURLParams& params) OVERRIDE; 99 const content::OpenURLParams& params) OVERRIDE;
107 virtual void NavigationStateChanged(const content::WebContents* source, 100 virtual void NavigationStateChanged(const content::WebContents* source,
108 unsigned changed_flags) OVERRIDE; 101 unsigned changed_flags) OVERRIDE;
109 virtual void AddNewContents(content::WebContents* source, 102 virtual void AddNewContents(content::WebContents* source,
110 content::WebContents* new_contents, 103 content::WebContents* new_contents,
111 WindowOpenDisposition disposition, 104 WindowOpenDisposition disposition,
112 const gfx::Rect& initial_pos, 105 const gfx::Rect& initial_pos,
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
212 virtual void InfoBarContainerStateChanged(bool is_animating) OVERRIDE; 205 virtual void InfoBarContainerStateChanged(bool is_animating) OVERRIDE;
213 virtual bool DrawInfoBarArrows(int* x) const OVERRIDE; 206 virtual bool DrawInfoBarArrows(int* x) const OVERRIDE;
214 207
215 // Overridden from BlockedContentTabHelperDelegate: 208 // Overridden from BlockedContentTabHelperDelegate:
216 virtual content::WebContents* GetConstrainingWebContents( 209 virtual content::WebContents* GetConstrainingWebContents(
217 content::WebContents* source) OVERRIDE; 210 content::WebContents* source) OVERRIDE;
218 211
219 protected: 212 protected:
220 virtual ~ExternalTabContainerWin(); 213 virtual ~ExternalTabContainerWin();
221 214
222 // Overridden from views::NativeWidgetWin: 215 // WidgetObserver overrides.
223 virtual bool PreHandleMSG(UINT message, 216 virtual void OnWidgetCreated(views::Widget* widget) OVERRIDE;
224 WPARAM w_param, 217 virtual void OnWidgetDestroying(views::Widget* widget) OVERRIDE;
225 LPARAM l_param, 218 virtual void OnWidgetDestroyed(views::Widget* widget) OVERRIDE;
226 LRESULT* result) OVERRIDE;
227 virtual void PostHandleMSG(UINT message,
228 WPARAM w_param,
229 LPARAM l_param) OVERRIDE;
230 virtual void OnFinalMessage(HWND window);
231 219
232 bool InitNavigationInfo(NavigationInfo* nav_info, 220 bool InitNavigationInfo(NavigationInfo* nav_info,
233 content::NavigationType nav_type, 221 content::NavigationType nav_type,
234 int relative_offset); 222 int relative_offset);
235 void Navigate(const GURL& url, const GURL& referrer); 223 void Navigate(const GURL& url, const GURL& referrer);
236 224
237 // Helper resource automation registration method, allowing registration of 225 // Helper resource automation registration method, allowing registration of
238 // pending RenderViewHosts. 226 // pending RenderViewHosts.
239 void RegisterRenderViewHostForAutomation( 227 void RegisterRenderViewHostForAutomation(
240 content::RenderViewHost* render_view_host, 228 content::RenderViewHost* render_view_host,
241 bool pending_view); 229 bool pending_view);
242 230
243 // Helper function for processing keystokes coming back from the renderer 231 // Helper function for processing keystokes coming back from the renderer
244 // process. 232 // process.
245 bool ProcessUnhandledKeyStroke(HWND window, UINT message, WPARAM wparam, 233 bool ProcessUnhandledKeyStroke(HWND window, UINT message, WPARAM wparam,
246 LPARAM lparam); 234 LPARAM lparam);
247 235
248 void LoadAccelerators(); 236 void LoadAccelerators();
249 237
250 // Sends over pending Open URL requests to the external host. 238 // Sends over pending Open URL requests to the external host.
251 void ServicePendingOpenURLRequests(); 239 void ServicePendingOpenURLRequests();
252 240
253 // Scheduled as a task in ExternalTabContainerWin::Reinitialize. 241 // Scheduled as a task in ExternalTabContainerWin::Reinitialize.
254 void OnReinitialize(); 242 void OnReinitialize();
255 243
256 // Creates and initializes the view hierarchy for this 244 // Creates and initializes the view hierarchy for this
257 // ExternalTabContainerWin. 245 // ExternalTabContainerWin.
258 void SetupExternalTabView(); 246 void SetupExternalTabView();
259 247
248 views::Widget* widget_;
260 scoped_ptr<content::WebContents> web_contents_; 249 scoped_ptr<content::WebContents> web_contents_;
261 scoped_refptr<AutomationProvider> automation_; 250 scoped_refptr<AutomationProvider> automation_;
262 251
263 content::NotificationRegistrar registrar_; 252 content::NotificationRegistrar registrar_;
264 253
265 // A view to handle focus cycling 254 // A view to handle focus cycling
266 views::WebView* tab_contents_container_; 255 views::WebView* tab_contents_container_;
267 256
268 int tab_handle_; 257 int tab_handle_;
269 // A failed navigation like a 404 is followed in chrome with a success 258 // A failed navigation like a 404 is followed in chrome with a success
270 // navigation for the 404 page. We need to ignore the next navigation 259 // navigation for the 404 page. We need to ignore the next navigation
271 // to avoid confusing the clients of the external tab. This member variable 260 // to avoid confusing the clients of the external tab. This member variable
272 // is set when we need to ignore the next load notification. 261 // is set when we need to ignore the next load notification.
273 bool ignore_next_load_notification_; 262 bool ignore_next_load_notification_;
274 263
275 scoped_ptr<RenderViewContextMenuViews> external_context_menu_; 264 scoped_ptr<RenderViewContextMenuViews> external_context_menu_;
276 265
277 // A message filter to load resources via automation 266 // A message filter to load resources via automation
278 scoped_refptr<AutomationResourceMessageFilter> 267 scoped_refptr<AutomationResourceMessageFilter>
279 automation_resource_message_filter_; 268 automation_resource_message_filter_;
280 269
281 // If all the url requests for this tab are to be loaded via automation. 270 // If all the url requests for this tab are to be loaded via automation.
282 bool load_requests_via_automation_; 271 bool load_requests_via_automation_;
283 272
284 // whether top level URL requests are to be handled by the automation client. 273 // whether top level URL requests are to be handled by the automation client.
285 bool handle_top_level_requests_; 274 bool handle_top_level_requests_;
286 275
276 // set to true if the host needs to get notified of all top level navigations
robertshield 2013/02/27 21:15:42 set -> Set
grt (UTC plus 2) 2013/02/28 02:48:41 Done.
277 // in this page. This typically applies to hosts which would render the new
278 // page without chrome frame.
279 bool route_all_top_level_navigations_;
280
287 // Contains ExternalTabContainers that have not been connected to as yet. 281 // Contains ExternalTabContainers that have not been connected to as yet.
288 static base::LazyInstance<PendingTabs> pending_tabs_; 282 static base::LazyInstance<PendingTabs> pending_tabs_;
289 283
290 // Allows us to run tasks on the ExternalTabContainerWin instance which are 284 // Allows us to run tasks on the ExternalTabContainerWin instance which are
291 // bound by its lifetime. 285 // bound by its lifetime.
292 base::WeakPtrFactory<ExternalTabContainerWin> weak_factory_; 286 base::WeakPtrFactory<ExternalTabContainerWin> weak_factory_;
293 287
294 // The URL request context to be used for this tab. Can be NULL. 288 // The URL request context to be used for this tab. Can be NULL.
295 scoped_refptr<ChromeURLRequestContextGetter> request_context_; 289 scoped_refptr<ChromeURLRequestContextGetter> request_context_;
296 290
(...skipping 18 matching lines...) Expand all
315 // Set to true if the ExternalTabContainerWin instance is waiting for an ack 309 // Set to true if the ExternalTabContainerWin instance is waiting for an ack
316 // from the host. 310 // from the host.
317 bool pending_; 311 bool pending_;
318 312
319 views::FocusManager* focus_manager_; 313 views::FocusManager* focus_manager_;
320 314
321 views::View* external_tab_view_; 315 views::View* external_tab_view_;
322 316
323 IPC::Message* unload_reply_message_; 317 IPC::Message* unload_reply_message_;
324 318
325 // set to true if the host needs to get notified of all top level navigations
326 // in this page. This typically applies to hosts which would render the new
327 // page without chrome frame.
328 bool route_all_top_level_navigations_;
329
330 scoped_ptr<ui::ViewProp> prop_; 319 scoped_ptr<ui::ViewProp> prop_;
331 320
332 // if this tab is a popup 321 // if this tab is a popup
333 bool is_popup_window_; 322 bool is_popup_window_;
334 323
335 DISALLOW_COPY_AND_ASSIGN(ExternalTabContainerWin); 324 DISALLOW_COPY_AND_ASSIGN(ExternalTabContainerWin);
336 }; 325 };
337 326
338 // This class is instantiated for handling requests to open popups for external 327 // This class is instantiated for handling requests to open popups for external
339 // tabs hosted in browsers which need to be notified about all top level 328 // tabs hosted in browsers which need to be notified about all top level
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
394 return false; 383 return false;
395 } 384 }
396 385
397 virtual void BeforeUnloadFired(content::WebContents* tab, bool proceed, 386 virtual void BeforeUnloadFired(content::WebContents* tab, bool proceed,
398 bool* proceed_to_fire_unload) { 387 bool* proceed_to_fire_unload) {
399 NOTREACHED(); 388 NOTREACHED();
400 } 389 }
401 }; 390 };
402 391
403 #endif // CHROME_BROWSER_UI_VIEWS_EXTERNAL_TAB_CONTAINER_WIN_H_ 392 #endif // CHROME_BROWSER_UI_VIEWS_EXTERNAL_TAB_CONTAINER_WIN_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698