• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_BROWSER_TAB_CONTENTS_BACKGROUND_CONTENTS_H_
6 #define CHROME_BROWSER_TAB_CONTENTS_BACKGROUND_CONTENTS_H_
7 #pragma once
8 
9 #include <string>
10 #include <vector>
11 
12 #include "base/scoped_ptr.h"
13 #include "chrome/browser/tab_contents/render_view_host_delegate_helper.h"
14 #include "chrome/browser/ui/app_modal_dialogs/js_modal_dialog.h"
15 #include "chrome/common/view_types.h"
16 #include "content/browser/renderer_host/render_view_host_delegate.h"
17 #include "content/common/notification_registrar.h"
18 #include "content/common/window_container_type.h"
19 #include "webkit/glue/window_open_disposition.h"
20 
21 class TabContents;
22 struct ExtensionHostMsg_DomMessage_Params;
23 struct WebPreferences;
24 
25 namespace gfx {
26 class Rect;
27 }
28 
29 // This class is a peer of TabContents. It can host a renderer, but does not
30 // have any visible display. Its navigation is not managed by a
31 // NavigationController because is has no facility for navigating (other than
32 // programatically view window.location.href) or RenderViewHostManager because
33 // it is never allowed to navigate across a SiteInstance boundary.
34 class BackgroundContents : public RenderViewHostDelegate,
35                            public RenderViewHostDelegate::View,
36                            public NotificationObserver,
37                            public JavaScriptAppModalDialogDelegate {
38  public:
39   class Delegate {
40    public:
41     // Called by ShowCreatedWindow. Asks the delegate to attach the opened
42     // TabContents to a suitable container (e.g. browser) or to show it if it's
43     // a popup window.
44     virtual void AddTabContents(TabContents* new_contents,
45                                 WindowOpenDisposition disposition,
46                                 const gfx::Rect& initial_pos,
47                                 bool user_gesture) = 0;
48 
49    protected:
~Delegate()50     virtual ~Delegate() {}
51   };
52 
53   BackgroundContents(SiteInstance* site_instance,
54                      int routing_id,
55                      Delegate* delegate);
56   virtual ~BackgroundContents();
57 
58   // Provide access to the RenderViewHost for the
59   // RenderViewHostDelegateViewHelper
render_view_host()60   RenderViewHost* render_view_host() { return render_view_host_; }
61 
62   // RenderViewHostDelegate implementation.
63   virtual BackgroundContents* GetAsBackgroundContents();
64   virtual RenderViewHostDelegate::View* GetViewDelegate();
65   virtual const GURL& GetURL() const;
66   virtual ViewType::Type GetRenderViewType() const;
67   virtual int GetBrowserWindowID() const;
68   virtual void DidNavigate(RenderViewHost* render_view_host,
69                            const ViewHostMsg_FrameNavigate_Params& params);
70   virtual WebPreferences GetWebkitPrefs();
71   virtual void ProcessWebUIMessage(
72       const ExtensionHostMsg_DomMessage_Params& params);
73   virtual void RunJavaScriptMessage(const std::wstring& message,
74                                     const std::wstring& default_prompt,
75                                     const GURL& frame_url,
76                                     const int flags,
77                                     IPC::Message* reply_msg,
78                                     bool* did_suppress_message);
79   virtual void Close(RenderViewHost* render_view_host);
80   virtual RendererPreferences GetRendererPrefs(Profile* profile) const;
81   virtual void RenderViewGone(RenderViewHost* rvh,
82                               base::TerminationStatus status,
83                               int error_code);
84 
85   // RenderViewHostDelegate::View
86   virtual void CreateNewWindow(
87       int route_id,
88       const ViewHostMsg_CreateWindow_Params& params);
89   virtual void CreateNewWidget(int route_id, WebKit::WebPopupType popup_type);
90   virtual void CreateNewFullscreenWidget(int route_id);
91   virtual void ShowCreatedWindow(int route_id,
92                                  WindowOpenDisposition disposition,
93                                  const gfx::Rect& initial_pos,
94                                  bool user_gesture);
95   virtual void ShowCreatedWidget(int route_id,
96                                  const gfx::Rect& initial_pos);
97   virtual void ShowCreatedFullscreenWidget(int route_id);
ShowContextMenu(const ContextMenuParams & params)98   virtual void ShowContextMenu(const ContextMenuParams& params) {}
ShowPopupMenu(const gfx::Rect & bounds,int item_height,double item_font_size,int selected_item,const std::vector<WebMenuItem> & items,bool right_aligned)99   virtual void ShowPopupMenu(const gfx::Rect& bounds,
100                              int item_height,
101                              double item_font_size,
102                              int selected_item,
103                              const std::vector<WebMenuItem>& items,
104                              bool right_aligned) {}
StartDragging(const WebDropData & drop_data,WebKit::WebDragOperationsMask allowed_operations,const SkBitmap & image,const gfx::Point & image_offset)105   virtual void StartDragging(const WebDropData& drop_data,
106                              WebKit::WebDragOperationsMask allowed_operations,
107                              const SkBitmap& image,
108                              const gfx::Point& image_offset) {}
UpdateDragCursor(WebKit::WebDragOperation operation)109   virtual void UpdateDragCursor(WebKit::WebDragOperation operation) {}
GotFocus()110   virtual void GotFocus() {}
TakeFocus(bool reverse)111   virtual void TakeFocus(bool reverse) {}
LostCapture()112   virtual void LostCapture() {}
Activate()113   virtual void Activate() {}
Deactivate()114   virtual void Deactivate() {}
115   virtual bool PreHandleKeyboardEvent(const NativeWebKeyboardEvent& event,
116                                       bool* is_keyboard_shortcut);
HandleKeyboardEvent(const NativeWebKeyboardEvent & event)117   virtual void HandleKeyboardEvent(const NativeWebKeyboardEvent& event) {}
HandleMouseMove()118   virtual void HandleMouseMove() {}
HandleMouseDown()119   virtual void HandleMouseDown() {}
HandleMouseLeave()120   virtual void HandleMouseLeave() {}
HandleMouseUp()121   virtual void HandleMouseUp() {}
HandleMouseActivate()122   virtual void HandleMouseActivate() {}
UpdatePreferredSize(const gfx::Size & new_size)123   virtual void UpdatePreferredSize(const gfx::Size& new_size) {}
124 
125   // NotificationObserver
126   virtual void Observe(NotificationType type,
127                        const NotificationSource& source,
128                        const NotificationDetails& details);
129 
130   // Overridden from JavaScriptAppModalDialogDelegate:
131   virtual void OnMessageBoxClosed(IPC::Message* reply_msg,
132                                   bool success,
133                                   const std::wstring& prompt);
SetSuppressMessageBoxes(bool suppress_message_boxes)134   virtual void SetSuppressMessageBoxes(bool suppress_message_boxes) {}
135   virtual gfx::NativeWindow GetMessageBoxRootWindow();
136   virtual TabContents* AsTabContents();
137   virtual ExtensionHost* AsExtensionHost();
138 
139   virtual void UpdateInspectorSetting(const std::string& key,
140                                       const std::string& value);
141   virtual void ClearInspectorSettings();
142 
143   // Helper to find the BackgroundContents that originated the given request.
144   // Can be NULL if the page has been closed or some other error occurs.
145   // Should only be called from the UI thread, since it accesses
146   // BackgroundContents.
147   static BackgroundContents* GetBackgroundContentsByID(int render_process_id,
148                                                        int render_view_id);
149 
150  protected:
151   // Exposed for testing.
152   BackgroundContents();
153 
154  private:
155   // The delegate for this BackgroundContents.
156   Delegate* delegate_;
157 
158   // The host for our HTML content.
159   RenderViewHost* render_view_host_;
160 
161   // Common implementations of some RenderViewHostDelegate::View methods.
162   RenderViewHostDelegateViewHelper delegate_view_helper_;
163 
164   // The URL being hosted.
165   GURL url_;
166 
167   NotificationRegistrar registrar_;
168 
169   DISALLOW_COPY_AND_ASSIGN(BackgroundContents);
170 };
171 
172 // This is the data sent out as the details with BACKGROUND_CONTENTS_OPENED.
173 struct BackgroundContentsOpenedDetails {
174   // The BackgroundContents object that has just been opened.
175   BackgroundContents* contents;
176 
177   // The name of the parent frame for these contents.
178   const string16& frame_name;
179 
180   // The ID of the parent application (if any).
181   const string16& application_id;
182 };
183 
184 #endif  // CHROME_BROWSER_TAB_CONTENTS_BACKGROUND_CONTENTS_H_
185