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_NOTIFICATIONS_BALLOON_HOST_H_ 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define CHROME_BROWSER_NOTIFICATIONS_BALLOON_HOST_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/extensions/extension_function_dispatcher.h" 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/tab_contents/render_view_host_delegate_helper.h" 15dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/renderer_host/render_view_host_delegate.h" 16ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/notification_observer.h" 17ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/notification_registrar.h" 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 19513209b27ff55e2841eac0e4120199c23acce758Ben Murdochclass Balloon; 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass Browser; 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass Profile; 22513209b27ff55e2841eac0e4120199c23acce758Ben Murdochclass SiteInstance; 23513209b27ff55e2841eac0e4120199c23acce758Ben Murdochstruct RendererPreferences; 24513209b27ff55e2841eac0e4120199c23acce758Ben Murdochstruct WebPreferences; 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass BalloonHost : public RenderViewHostDelegate, 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public RenderViewHostDelegate::View, 2872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen public ExtensionFunctionDispatcher::Delegate, 2972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen public NotificationObserver { 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch explicit BalloonHost(Balloon* balloon); 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Initialize the view. 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void Init(); 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Stops showing the balloon. 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void Shutdown(); 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // ExtensionFunctionDispatcher::Delegate overrides. 4072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual Browser* GetBrowser(); 41731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick virtual gfx::NativeView GetNativeViewOfHost(); 42731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick virtual TabContents* associated_tab_contents() const; 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch RenderViewHost* render_view_host() const { return render_view_host_; } 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 46513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch const string16& GetSource() const; 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // RenderViewHostDelegate overrides. 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual WebPreferences GetWebkitPrefs(); 50731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick virtual SiteInstance* GetSiteInstance() const; 51731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick virtual Profile* GetProfile() const; 52731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick virtual const GURL& GetURL() const; 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void Close(RenderViewHost* render_view_host); 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void RenderViewCreated(RenderViewHost* render_view_host); 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void RenderViewReady(RenderViewHost* render_view_host); 5621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual void RenderViewGone(RenderViewHost* render_view_host, 5721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen base::TerminationStatus status, 5821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen int error_code); 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void UpdateTitle(RenderViewHost* render_view_host, 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int32 page_id, const std::wstring& title) {} 61731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick virtual int GetBrowserWindowID() const; 62731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick virtual ViewType::Type GetRenderViewType() const; 63731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick virtual RenderViewHostDelegate::View* GetViewDelegate(); 64ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void ProcessWebUIMessage( 65ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const ExtensionHostMsg_DomMessage_Params& params); 6672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 6772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // NotificationObserver override. 6872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual void Observe(NotificationType type, 6972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const NotificationSource& source, 7072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const NotificationDetails& details); 7172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // RenderViewHostDelegate::View methods. Only the ones for opening new 74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // windows are currently implemented. 75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void CreateNewWindow( 76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int route_id, 7772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const ViewHostMsg_CreateWindow_Params& params); 78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void CreateNewWidget(int route_id, WebKit::WebPopupType popup_type) {} 7972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual void CreateNewFullscreenWidget(int route_id) {} 80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void ShowCreatedWindow(int route_id, 81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch WindowOpenDisposition disposition, 82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const gfx::Rect& initial_pos, 83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool user_gesture); 84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void ShowCreatedWidget(int route_id, 85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const gfx::Rect& initial_pos) {} 863345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick virtual void ShowCreatedFullscreenWidget(int route_id) {} 87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void ShowContextMenu(const ContextMenuParams& params) {} 88513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual void ShowPopupMenu(const gfx::Rect& bounds, 89513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch int item_height, 90513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch double item_font_size, 91513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch int selected_item, 92513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch const std::vector<WebMenuItem>& items, 93513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch bool right_aligned) {} 94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void StartDragging(const WebDropData& drop_data, 95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch WebKit::WebDragOperationsMask allowed_ops) {} 96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void StartDragging(const WebDropData&, 97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch WebKit::WebDragOperationsMask, 98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const SkBitmap&, 99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const gfx::Point&) {} 100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void UpdateDragCursor(WebKit::WebDragOperation operation) {} 101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void GotFocus() {} 102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void TakeFocus(bool reverse) {} 1033345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick virtual void LostCapture() {} 1043345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick virtual void Activate() {} 1053345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick virtual void Deactivate() {} 106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool PreHandleKeyboardEvent(const NativeWebKeyboardEvent& event, 10721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen bool* is_keyboard_shortcut); 108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void HandleKeyboardEvent(const NativeWebKeyboardEvent& event) {} 1093345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick virtual void HandleMouseMove() {} 1103345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick virtual void HandleMouseDown(); 111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void HandleMouseLeave() {} 1123345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick virtual void HandleMouseUp() {} 1133345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick virtual void HandleMouseActivate() {} 114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void UpdatePreferredSize(const gfx::Size& pref_size); 115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual RendererPreferences GetRendererPrefs(Profile* profile) const; 116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 11772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Enable Web UI. This has to be called before renderer is created. 11872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen void EnableWebUI(); 1193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 120731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick virtual void UpdateInspectorSetting(const std::string& key, 121731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick const std::string& value); 122731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick virtual void ClearInspectorSettings(); 123731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 124c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch protected: 125731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick virtual ~BalloonHost(); 126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Must override in platform specific implementations. 127c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void InitRenderWidgetHostView() = 0; 128c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual RenderWidgetHostView* render_widget_host_view() const = 0; 129c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 130c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Owned pointer to the host for the renderer process. 131c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch RenderViewHost* render_view_host_; 132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 133c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 134c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Called to send an event that the balloon has been disconnected from 135c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // a renderer (if should_notify_on_disconnect_ is true). 136c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void NotifyDisconnect(); 137c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 138c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Non-owned pointer to the associated balloon. 139c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Balloon* balloon_; 140c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 141c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // True after Init() has completed. 142c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool initialized_; 143c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 144c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Indicates whether we should notify about disconnection of this balloon. 145c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // This is used to ensure disconnection notifications only happen if 146c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // a connection notification has happened and that they happen only once. 147c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool should_notify_on_disconnect_; 148c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 149c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Site instance for the balloon/profile, to be used for opening new links. 150c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<SiteInstance> site_instance_; 151c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 152c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Common implementations of some RenderViewHostDelegate::View methods. 153c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch RenderViewHostDelegateViewHelper delegate_view_helper_; 154c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 155c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Handles requests to extension APIs. Will only be non-NULL if we are 156c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // rendering a page from an extension. 157c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_ptr<ExtensionFunctionDispatcher> extension_function_dispatcher_; 1583345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 15972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // A flag to enable Web UI. 16072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen bool enable_web_ui_; 16172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 16272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen NotificationRegistrar registrar_; 163c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 164c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 165c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif // CHROME_BROWSER_NOTIFICATIONS_BALLOON_HOST_H_ 166