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_RENDER_VIEW_HOST_DELEGATE_HELPER_H_ 6 #define CHROME_BROWSER_TAB_CONTENTS_RENDER_VIEW_HOST_DELEGATE_HELPER_H_ 7 #pragma once 8 9 #include <map> 10 11 #include "base/basictypes.h" 12 #include "content/browser/webui/web_ui.h" 13 #include "content/common/window_container_type.h" 14 #include "third_party/WebKit/Source/WebKit/chromium/public/WebPopupType.h" 15 #include "ui/gfx/rect.h" 16 #include "webkit/glue/webpreferences.h" 17 #include "webkit/glue/window_open_disposition.h" 18 19 class BackgroundContents; 20 class Profile; 21 class RenderProcessHost; 22 class RenderViewHost; 23 class RenderViewHostDelegate; 24 class RenderWidgetHost; 25 class RenderWidgetHostView; 26 class SiteInstance; 27 class TabContents; 28 29 // Provides helper methods that provide common implementations of some 30 // RenderViewHostDelegate::View methods. 31 class RenderViewHostDelegateViewHelper { 32 public: 33 RenderViewHostDelegateViewHelper(); 34 virtual ~RenderViewHostDelegateViewHelper(); 35 36 // Creates a new renderer for window.open. This will either be a 37 // BackgroundContents (if the window_container_type == 38 // WINDOW_CONTAINER_TYPE_BACKGROUND and permissions allow) or a TabContents. 39 // If a TabContents is created, it is returned. Otherwise NULL is returned. 40 virtual TabContents* CreateNewWindow( 41 int route_id, 42 Profile* profile, 43 SiteInstance* site, 44 WebUI::TypeID webui_type, 45 RenderViewHostDelegate* opener, 46 WindowContainerType window_container_type, 47 const string16& frame_name); 48 49 // Creates a new RenderWidgetHost and saves it for later retrieval by 50 // GetCreatedWidget. 51 virtual RenderWidgetHostView* CreateNewWidget(int route_id, 52 WebKit::WebPopupType popup_type, 53 RenderProcessHost* process); 54 55 virtual RenderWidgetHostView* CreateNewFullscreenWidget( 56 int route_id, RenderProcessHost* process); 57 58 // Finds the new RenderWidgetHost and returns it. Note that this can only be 59 // called once as this call also removes it from the internal map. 60 virtual RenderWidgetHostView* GetCreatedWidget(int route_id); 61 62 // Finds the new RenderViewHost/Delegate by route_id, initializes it for 63 // for renderer-initiated creation, and returns the TabContents that needs 64 // to be shown, if there is one (i.e. not a BackgroundContents). Note that 65 // this can only be called once as this call also removes it from the internal 66 // map. 67 virtual TabContents* GetCreatedWindow(int route_id); 68 69 // Removes |host| from the internal map of pending RenderWidgets. 70 void RenderWidgetHostDestroyed(RenderWidgetHost* host); 71 72 private: 73 BackgroundContents* MaybeCreateBackgroundContents( 74 int route_id, 75 Profile* profile, 76 SiteInstance* site, 77 const GURL& opener_url, 78 const string16& frame_name); 79 80 // Tracks created RenderViewHost objects that have not been shown yet. 81 // They are identified by the route ID passed to CreateNewWindow. 82 typedef std::map<int, RenderViewHost*> PendingContents; 83 PendingContents pending_contents_; 84 85 // These maps hold on to the widgets that we created on behalf of the 86 // renderer that haven't shown yet. 87 typedef std::map<int, RenderWidgetHostView*> PendingWidgetViews; 88 PendingWidgetViews pending_widget_views_; 89 90 DISALLOW_COPY_AND_ASSIGN(RenderViewHostDelegateViewHelper); 91 }; 92 93 94 // Provides helper methods that provide common implementations of some 95 // RenderViewHostDelegate methods. 96 class RenderViewHostDelegateHelper { 97 public: 98 static WebPreferences GetWebkitPrefs(Profile* profile, bool is_web_ui); 99 100 static void UpdateInspectorSetting(Profile* profile, 101 const std::string& key, 102 const std::string& value); 103 static void ClearInspectorSettings(Profile* profile); 104 gpu_enabled()105 static bool gpu_enabled() { return gpu_enabled_; } set_gpu_enabled(bool enabled)106 static void set_gpu_enabled(bool enabled) { gpu_enabled_ = enabled; } 107 108 private: 109 RenderViewHostDelegateHelper(); 110 111 // Master switch for enabling/disabling GPU acceleration for the current 112 // browser session. It does not change the acceleration settings for 113 // existing tabs, just the future ones. 114 static bool gpu_enabled_; 115 116 DISALLOW_COPY_AND_ASSIGN(RenderViewHostDelegateHelper); 117 }; 118 119 #endif // CHROME_BROWSER_TAB_CONTENTS_RENDER_VIEW_HOST_DELEGATE_HELPER_H_ 120