| // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CHROME_BROWSER_TAB_CONTENTS_BACKGROUND_CONTENTS_H_ |
| #define CHROME_BROWSER_TAB_CONTENTS_BACKGROUND_CONTENTS_H_ |
| #pragma once |
| |
| #include <string> |
| #include <vector> |
| |
| #include "base/scoped_ptr.h" |
| #include "chrome/browser/tab_contents/render_view_host_delegate_helper.h" |
| #include "chrome/browser/ui/app_modal_dialogs/js_modal_dialog.h" |
| #include "chrome/common/view_types.h" |
| #include "content/browser/renderer_host/render_view_host_delegate.h" |
| #include "content/common/notification_registrar.h" |
| #include "content/common/window_container_type.h" |
| #include "webkit/glue/window_open_disposition.h" |
| |
| class TabContents; |
| struct ExtensionHostMsg_DomMessage_Params; |
| struct WebPreferences; |
| |
| namespace gfx { |
| class Rect; |
| } |
| |
| // This class is a peer of TabContents. It can host a renderer, but does not |
| // have any visible display. Its navigation is not managed by a |
| // NavigationController because is has no facility for navigating (other than |
| // programatically view window.location.href) or RenderViewHostManager because |
| // it is never allowed to navigate across a SiteInstance boundary. |
| class BackgroundContents : public RenderViewHostDelegate, |
| public RenderViewHostDelegate::View, |
| public NotificationObserver, |
| public JavaScriptAppModalDialogDelegate { |
| public: |
| class Delegate { |
| public: |
| // Called by ShowCreatedWindow. Asks the delegate to attach the opened |
| // TabContents to a suitable container (e.g. browser) or to show it if it's |
| // a popup window. |
| virtual void AddTabContents(TabContents* new_contents, |
| WindowOpenDisposition disposition, |
| const gfx::Rect& initial_pos, |
| bool user_gesture) = 0; |
| |
| protected: |
| virtual ~Delegate() {} |
| }; |
| |
| BackgroundContents(SiteInstance* site_instance, |
| int routing_id, |
| Delegate* delegate); |
| virtual ~BackgroundContents(); |
| |
| // Provide access to the RenderViewHost for the |
| // RenderViewHostDelegateViewHelper |
| RenderViewHost* render_view_host() { return render_view_host_; } |
| |
| // RenderViewHostDelegate implementation. |
| virtual BackgroundContents* GetAsBackgroundContents(); |
| virtual RenderViewHostDelegate::View* GetViewDelegate(); |
| virtual const GURL& GetURL() const; |
| virtual ViewType::Type GetRenderViewType() const; |
| virtual int GetBrowserWindowID() const; |
| virtual void DidNavigate(RenderViewHost* render_view_host, |
| const ViewHostMsg_FrameNavigate_Params& params); |
| virtual WebPreferences GetWebkitPrefs(); |
| virtual void ProcessWebUIMessage( |
| const ExtensionHostMsg_DomMessage_Params& params); |
| virtual void RunJavaScriptMessage(const std::wstring& message, |
| const std::wstring& default_prompt, |
| const GURL& frame_url, |
| const int flags, |
| IPC::Message* reply_msg, |
| bool* did_suppress_message); |
| virtual void Close(RenderViewHost* render_view_host); |
| virtual RendererPreferences GetRendererPrefs(Profile* profile) const; |
| virtual void RenderViewGone(RenderViewHost* rvh, |
| base::TerminationStatus status, |
| int error_code); |
| |
| // RenderViewHostDelegate::View |
| virtual void CreateNewWindow( |
| int route_id, |
| const ViewHostMsg_CreateWindow_Params& params); |
| virtual void CreateNewWidget(int route_id, WebKit::WebPopupType popup_type); |
| virtual void CreateNewFullscreenWidget(int route_id); |
| virtual void ShowCreatedWindow(int route_id, |
| WindowOpenDisposition disposition, |
| const gfx::Rect& initial_pos, |
| bool user_gesture); |
| virtual void ShowCreatedWidget(int route_id, |
| const gfx::Rect& initial_pos); |
| virtual void ShowCreatedFullscreenWidget(int route_id); |
| virtual void ShowContextMenu(const ContextMenuParams& params) {} |
| virtual void ShowPopupMenu(const gfx::Rect& bounds, |
| int item_height, |
| double item_font_size, |
| int selected_item, |
| const std::vector<WebMenuItem>& items, |
| bool right_aligned) {} |
| virtual void StartDragging(const WebDropData& drop_data, |
| WebKit::WebDragOperationsMask allowed_operations, |
| const SkBitmap& image, |
| const gfx::Point& image_offset) {} |
| virtual void UpdateDragCursor(WebKit::WebDragOperation operation) {} |
| virtual void GotFocus() {} |
| virtual void TakeFocus(bool reverse) {} |
| virtual void LostCapture() {} |
| virtual void Activate() {} |
| virtual void Deactivate() {} |
| virtual bool PreHandleKeyboardEvent(const NativeWebKeyboardEvent& event, |
| bool* is_keyboard_shortcut); |
| virtual void HandleKeyboardEvent(const NativeWebKeyboardEvent& event) {} |
| virtual void HandleMouseMove() {} |
| virtual void HandleMouseDown() {} |
| virtual void HandleMouseLeave() {} |
| virtual void HandleMouseUp() {} |
| virtual void HandleMouseActivate() {} |
| virtual void UpdatePreferredSize(const gfx::Size& new_size) {} |
| |
| // NotificationObserver |
| virtual void Observe(NotificationType type, |
| const NotificationSource& source, |
| const NotificationDetails& details); |
| |
| // Overridden from JavaScriptAppModalDialogDelegate: |
| virtual void OnMessageBoxClosed(IPC::Message* reply_msg, |
| bool success, |
| const std::wstring& prompt); |
| virtual void SetSuppressMessageBoxes(bool suppress_message_boxes) {} |
| virtual gfx::NativeWindow GetMessageBoxRootWindow(); |
| virtual TabContents* AsTabContents(); |
| virtual ExtensionHost* AsExtensionHost(); |
| |
| virtual void UpdateInspectorSetting(const std::string& key, |
| const std::string& value); |
| virtual void ClearInspectorSettings(); |
| |
| // Helper to find the BackgroundContents that originated the given request. |
| // Can be NULL if the page has been closed or some other error occurs. |
| // Should only be called from the UI thread, since it accesses |
| // BackgroundContents. |
| static BackgroundContents* GetBackgroundContentsByID(int render_process_id, |
| int render_view_id); |
| |
| protected: |
| // Exposed for testing. |
| BackgroundContents(); |
| |
| private: |
| // The delegate for this BackgroundContents. |
| Delegate* delegate_; |
| |
| // The host for our HTML content. |
| RenderViewHost* render_view_host_; |
| |
| // Common implementations of some RenderViewHostDelegate::View methods. |
| RenderViewHostDelegateViewHelper delegate_view_helper_; |
| |
| // The URL being hosted. |
| GURL url_; |
| |
| NotificationRegistrar registrar_; |
| |
| DISALLOW_COPY_AND_ASSIGN(BackgroundContents); |
| }; |
| |
| // This is the data sent out as the details with BACKGROUND_CONTENTS_OPENED. |
| struct BackgroundContentsOpenedDetails { |
| // The BackgroundContents object that has just been opened. |
| BackgroundContents* contents; |
| |
| // The name of the parent frame for these contents. |
| const string16& frame_name; |
| |
| // The ID of the parent application (if any). |
| const string16& application_id; |
| }; |
| |
| #endif // CHROME_BROWSER_TAB_CONTENTS_BACKGROUND_CONTENTS_H_ |