172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifndef CHROME_BROWSER_TAB_CONTENTS_BACKGROUND_CONTENTS_H_ 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define CHROME_BROWSER_TAB_CONTENTS_BACKGROUND_CONTENTS_H_ 73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once 8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <string> 10513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include <vector> 11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 12ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/scoped_ptr.h" 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/tab_contents/render_view_host_delegate_helper.h" 1421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/ui/app_modal_dialogs/js_modal_dialog.h" 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/view_types.h" 16dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/renderer_host/render_view_host_delegate.h" 17ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/notification_registrar.h" 18ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/window_container_type.h" 193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "webkit/glue/window_open_disposition.h" 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass TabContents; 22ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenstruct ExtensionHostMsg_DomMessage_Params; 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstruct WebPreferences; 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 253345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merricknamespace gfx { 263345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass Rect; 273345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 283345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// This class is a peer of TabContents. It can host a renderer, but does not 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// have any visible display. Its navigation is not managed by a 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// NavigationController because is has no facility for navigating (other than 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// programatically view window.location.href) or RenderViewHostManager because 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// it is never allowed to navigate across a SiteInstance boundary. 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass BackgroundContents : public RenderViewHostDelegate, 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public RenderViewHostDelegate::View, 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public NotificationObserver, 37731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick public JavaScriptAppModalDialogDelegate { 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 393345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick class Delegate { 403345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick public: 413345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Called by ShowCreatedWindow. Asks the delegate to attach the opened 423345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // TabContents to a suitable container (e.g. browser) or to show it if it's 433345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // a popup window. 443345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick virtual void AddTabContents(TabContents* new_contents, 453345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick WindowOpenDisposition disposition, 463345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const gfx::Rect& initial_pos, 473345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick bool user_gesture) = 0; 483345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 493345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick protected: 503345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick virtual ~Delegate() {} 513345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick }; 523345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch BackgroundContents(SiteInstance* site_instance, 543345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick int routing_id, 553345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick Delegate* delegate); 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual ~BackgroundContents(); 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Provide access to the RenderViewHost for the 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // RenderViewHostDelegateViewHelper 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch RenderViewHost* render_view_host() { return render_view_host_; } 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // RenderViewHostDelegate implementation. 6321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual BackgroundContents* GetAsBackgroundContents(); 6421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual RenderViewHostDelegate::View* GetViewDelegate(); 6521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual const GURL& GetURL() const; 66731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick virtual ViewType::Type GetRenderViewType() const; 67731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick virtual int GetBrowserWindowID() const; 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void DidNavigate(RenderViewHost* render_view_host, 69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const ViewHostMsg_FrameNavigate_Params& params); 70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual WebPreferences GetWebkitPrefs(); 71ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void ProcessWebUIMessage( 72ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const ExtensionHostMsg_DomMessage_Params& params); 73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void RunJavaScriptMessage(const std::wstring& message, 74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const std::wstring& default_prompt, 75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const GURL& frame_url, 76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const int flags, 77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch IPC::Message* reply_msg, 78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool* did_suppress_message); 79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void Close(RenderViewHost* render_view_host); 80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual RendererPreferences GetRendererPrefs(Profile* profile) const; 8172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual void RenderViewGone(RenderViewHost* rvh, 8272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen base::TerminationStatus status, 8372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen int error_code); 84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // RenderViewHostDelegate::View 86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void CreateNewWindow( 87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int route_id, 8872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const ViewHostMsg_CreateWindow_Params& params); 89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void CreateNewWidget(int route_id, WebKit::WebPopupType popup_type); 9072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual void CreateNewFullscreenWidget(int route_id); 91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void ShowCreatedWindow(int route_id, 92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch WindowOpenDisposition disposition, 93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const gfx::Rect& initial_pos, 94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool user_gesture); 95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void ShowCreatedWidget(int route_id, 96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const gfx::Rect& initial_pos); 973345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick virtual void ShowCreatedFullscreenWidget(int route_id); 98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void ShowContextMenu(const ContextMenuParams& params) {} 99513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual void ShowPopupMenu(const gfx::Rect& bounds, 100513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch int item_height, 101513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch double item_font_size, 102513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch int selected_item, 103513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch const std::vector<WebMenuItem>& items, 104513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch bool right_aligned) {} 105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void StartDragging(const WebDropData& drop_data, 106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch WebKit::WebDragOperationsMask allowed_operations, 107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const SkBitmap& image, 108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const gfx::Point& image_offset) {} 109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void UpdateDragCursor(WebKit::WebDragOperation operation) {} 110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void GotFocus() {} 111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void TakeFocus(bool reverse) {} 1123345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick virtual void LostCapture() {} 1133345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick virtual void Activate() {} 1143345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick virtual void Deactivate() {} 115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool PreHandleKeyboardEvent(const NativeWebKeyboardEvent& event, 116731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick bool* is_keyboard_shortcut); 117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void HandleKeyboardEvent(const NativeWebKeyboardEvent& event) {} 1183345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick virtual void HandleMouseMove() {} 1193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick virtual void HandleMouseDown() {} 120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void HandleMouseLeave() {} 1213345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick virtual void HandleMouseUp() {} 1223345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick virtual void HandleMouseActivate() {} 123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void UpdatePreferredSize(const gfx::Size& new_size) {} 124c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // NotificationObserver 126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void Observe(NotificationType type, 127c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NotificationSource& source, 128c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NotificationDetails& details); 129c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 130731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Overridden from JavaScriptAppModalDialogDelegate: 131c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void OnMessageBoxClosed(IPC::Message* reply_msg, 132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool success, 133c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const std::wstring& prompt); 134c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void SetSuppressMessageBoxes(bool suppress_message_boxes) {} 135731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick virtual gfx::NativeWindow GetMessageBoxRootWindow(); 13621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual TabContents* AsTabContents(); 13721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual ExtensionHost* AsExtensionHost(); 138c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 139731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick virtual void UpdateInspectorSetting(const std::string& key, 140731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick const std::string& value); 141731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick virtual void ClearInspectorSettings(); 142731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 1434a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Helper to find the BackgroundContents that originated the given request. 1444a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Can be NULL if the page has been closed or some other error occurs. 1454a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Should only be called from the UI thread, since it accesses 1464a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // BackgroundContents. 1474a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch static BackgroundContents* GetBackgroundContentsByID(int render_process_id, 1484a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch int render_view_id); 1494a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 150c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch protected: 151c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Exposed for testing. 152c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch BackgroundContents(); 153c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 154c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 1553345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // The delegate for this BackgroundContents. 1563345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick Delegate* delegate_; 1573345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 158c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The host for our HTML content. 159c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch RenderViewHost* render_view_host_; 160c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 161c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Common implementations of some RenderViewHostDelegate::View methods. 162c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch RenderViewHostDelegateViewHelper delegate_view_helper_; 163c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 164c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The URL being hosted. 165c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GURL url_; 166c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 167c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NotificationRegistrar registrar_; 168c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 169c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(BackgroundContents); 170c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 171c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 172c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// This is the data sent out as the details with BACKGROUND_CONTENTS_OPENED. 173c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstruct BackgroundContentsOpenedDetails { 174c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The BackgroundContents object that has just been opened. 175c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch BackgroundContents* contents; 176c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 177c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The name of the parent frame for these contents. 178c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const string16& frame_name; 179c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 180c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The ID of the parent application (if any). 181c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const string16& application_id; 182c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 183c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 184c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif // CHROME_BROWSER_TAB_CONTENTS_BACKGROUND_CONTENTS_H_ 185