• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
3 // found in the LICENSE file.
4 
5 #ifndef CHROME_BROWSER_EXTERNAL_TAB_EXTERNAL_TAB_CONTAINER_H_
6 #define CHROME_BROWSER_EXTERNAL_TAB_EXTERNAL_TAB_CONTAINER_H_
7 
8 #include <windows.h>
9 
10 #include "base/memory/ref_counted.h"
11 #include "ui/gfx/native_widget_types.h"
12 
13 class AutomationProvider;
14 class AutomationResourceMessageFilter;
15 class GURL;
16 class Profile;
17 
18 namespace content {
19 class WebContents;
20 }
21 
22 namespace gfx {
23 class Rect;
24 }
25 
26 namespace IPC {
27 class Message;
28 }
29 
30 class ExternalTabContainer : public base::RefCounted<ExternalTabContainer> {
31  public:
32   static ExternalTabContainer* Create(
33       AutomationProvider* automation_provider,
34       AutomationResourceMessageFilter* filter);
35 
36   // A helper method that retrieves the ExternalTabContainer object that
37   // hosts the given WebContents.
38   static ExternalTabContainer* GetContainerForTab(
39       content::WebContents* web_contents);
40 
41   // Returns the ExternalTabContainer instance associated with the cookie
42   // passed in. It also erases the corresponding reference from the map.
43   // Returns NULL if we fail to find the cookie in the map.
44   static scoped_refptr<ExternalTabContainer> RemovePendingTab(uintptr_t cookie);
45 
46   // Initializes the instance. This must be invoked before any other member
47   // functions.
48   virtual bool Init(Profile* profile,
49                     HWND parent,
50                     const gfx::Rect& bounds,
51                     DWORD style,
52                     bool load_requests_via_automation,
53                     bool handle_top_level_requests,
54                     content::WebContents* existing_contents,
55                     const GURL& initial_url,
56                     const GURL& referrer,
57                     bool infobars_enabled,
58                     bool supports_full_tab_mode) = 0;
59 
60   // Unhook the keystroke listener and notify about the closing WebContents.
61   // This function gets called from three places, which is fine.
62   // 1. OnFinalMessage
63   // 2. In the destructor.
64   // 3. In AutomationProvider::CreateExternalTab
65   virtual void Uninitialize() = 0;
66 
67   // Used to reinitialize the automation channel and related information
68   // for this container. Typically used when an ExternalTabContainer
69   // instance is created by Chrome and attached to an automation client.
70   virtual bool Reinitialize(AutomationProvider* automation_provider,
71                             AutomationResourceMessageFilter* filter,
72                             HWND parent_window) = 0;
73 
74   // This is invoked when the external host reflects back to us a keyboard
75   // message it did not process.
76   virtual void ProcessUnhandledAccelerator(const MSG& msg) = 0;
77 
78   // See WebContents::FocusThroughTabTraversal. Called from AutomationProvider.
79   virtual void FocusThroughTabTraversal(bool reverse,
80                                         bool restore_focus_to_view) = 0;
81 
82   virtual void RunUnloadHandlers(IPC::Message* reply_message) = 0;
83 
84   virtual content::WebContents* GetWebContents() const = 0;
85   virtual HWND GetExternalTabHWND() const = 0;
86   virtual HWND GetContentHWND() const = 0;
87 
88   virtual void SetTabHandle(int handle) = 0;
89   virtual int GetTabHandle() const = 0;
90 
91   // Returns true if the context menu command was handled
92   virtual bool ExecuteContextMenuCommand(int command) = 0;
93 
94  protected:
~ExternalTabContainer()95   virtual ~ExternalTabContainer() {}
96 
97  private:
98   friend class base::RefCounted<ExternalTabContainer>;
99 };
100 
101 #endif  // CHROME_BROWSER_EXTERNAL_TAB_EXTERNAL_TAB_CONTAINER_H_
102