- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / browser / external_tab / external_tab_container.h
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:
95   virtual ~ExternalTabContainer() {}
96
97  private:
98   friend class base::RefCounted<ExternalTabContainer>;
99 };
100
101 #endif  // CHROME_BROWSER_EXTERNAL_TAB_EXTERNAL_TAB_CONTAINER_H_