Home | History | Annotate | Download | only in tab_contents
      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:
     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
     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);
     98   virtual void ShowContextMenu(const ContextMenuParams& params) {}
     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) {}
    105   virtual void StartDragging(const WebDropData& drop_data,
    106                              WebKit::WebDragOperationsMask allowed_operations,
    107                              const SkBitmap& image,
    108                              const gfx::Point& image_offset) {}
    109   virtual void UpdateDragCursor(WebKit::WebDragOperation operation) {}
    110   virtual void GotFocus() {}
    111   virtual void TakeFocus(bool reverse) {}
    112   virtual void LostCapture() {}
    113   virtual void Activate() {}
    114   virtual void Deactivate() {}
    115   virtual bool PreHandleKeyboardEvent(const NativeWebKeyboardEvent& event,
    116                                       bool* is_keyboard_shortcut);
    117   virtual void HandleKeyboardEvent(const NativeWebKeyboardEvent& event) {}
    118   virtual void HandleMouseMove() {}
    119   virtual void HandleMouseDown() {}
    120   virtual void HandleMouseLeave() {}
    121   virtual void HandleMouseUp() {}
    122   virtual void HandleMouseActivate() {}
    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);
    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