web_contents_view.h revision 116680a4aac90f2aa7413d9095a592090648e557
17842e56b97ce677b83bdab09cda48bc2d89ac75aJust// Copyright (c) 2012 The Chromium Authors. All rights reserved. 27842e56b97ce677b83bdab09cda48bc2d89ac75aJust// Use of this source code is governed by a BSD-style license that can be 37842e56b97ce677b83bdab09cda48bc2d89ac75aJust// found in the LICENSE file. 47842e56b97ce677b83bdab09cda48bc2d89ac75aJust 51ae29591efbb29492ce05378909ccf4028d7c1eeBehdad Esfahbod#ifndef CONTENT_BROWSER_WEB_CONTENTS_WEB_CONTENTS_VIEW_H_ 630e691edd056ba22fa8970280e986747817bec3dBehdad Esfahbod#define CONTENT_BROWSER_WEB_CONTENTS_WEB_CONTENTS_VIEW_H_ 77842e56b97ce677b83bdab09cda48bc2d89ac75aJust 87842e56b97ce677b83bdab09cda48bc2d89ac75aJust#include <string> 97842e56b97ce677b83bdab09cda48bc2d89ac75aJust 10455af6592bffbd6f2fc9f56fbfe083022a8353d4jvr#include "base/basictypes.h" 11455af6592bffbd6f2fc9f56fbfe083022a8353d4jvr#include "base/strings/string16.h" 12455af6592bffbd6f2fc9f56fbfe083022a8353d4jvr#include "content/common/content_export.h" 137842e56b97ce677b83bdab09cda48bc2d89ac75aJust#include "ui/gfx/native_widget_types.h" 147842e56b97ce677b83bdab09cda48bc2d89ac75aJust#include "ui/gfx/rect.h" 157842e56b97ce677b83bdab09cda48bc2d89ac75aJust#include "ui/gfx/size.h" 167842e56b97ce677b83bdab09cda48bc2d89ac75aJust 177842e56b97ce677b83bdab09cda48bc2d89ac75aJustnamespace content { 187842e56b97ce677b83bdab09cda48bc2d89ac75aJustclass RenderViewHost; 197842e56b97ce677b83bdab09cda48bc2d89ac75aJustclass RenderWidgetHost; 207842e56b97ce677b83bdab09cda48bc2d89ac75aJustclass RenderWidgetHostViewBase; 217842e56b97ce677b83bdab09cda48bc2d89ac75aJuststruct DropData; 227842e56b97ce677b83bdab09cda48bc2d89ac75aJust 2395c9e9fc11dc028bd1747788f2b417f3936fc59bjvr// The WebContentsView is an interface that is implemented by the platform- 247842e56b97ce677b83bdab09cda48bc2d89ac75aJust// dependent web contents views. The WebContents uses this interface to talk to 257842e56b97ce677b83bdab09cda48bc2d89ac75aJust// them. 267842e56b97ce677b83bdab09cda48bc2d89ac75aJustclass WebContentsView { 277842e56b97ce677b83bdab09cda48bc2d89ac75aJust public: 287842e56b97ce677b83bdab09cda48bc2d89ac75aJust virtual ~WebContentsView() {} 297842e56b97ce677b83bdab09cda48bc2d89ac75aJust 307842e56b97ce677b83bdab09cda48bc2d89ac75aJust // Returns the native widget that contains the contents of the tab. 317842e56b97ce677b83bdab09cda48bc2d89ac75aJust virtual gfx::NativeView GetNativeView() const = 0; 327842e56b97ce677b83bdab09cda48bc2d89ac75aJust 33f2cf9c5d6d503e16ee43dc9b617d96aed38806a8jvr // Returns the native widget with the main content of the tab (i.e. the main 34f2cf9c5d6d503e16ee43dc9b617d96aed38806a8jvr // render view host, though there may be many popups in the tab as children of 35f2cf9c5d6d503e16ee43dc9b617d96aed38806a8jvr // the container). 367842e56b97ce677b83bdab09cda48bc2d89ac75aJust virtual gfx::NativeView GetContentNativeView() const = 0; 377842e56b97ce677b83bdab09cda48bc2d89ac75aJust 38e388db566b9ba42669c7e353db4293cf27bc2a5bBehdad Esfahbod // Returns the outermost native view. This will be used as the parent for 397842e56b97ce677b83bdab09cda48bc2d89ac75aJust // dialog boxes. 407842e56b97ce677b83bdab09cda48bc2d89ac75aJust virtual gfx::NativeWindow GetTopLevelNativeWindow() const = 0; 417842e56b97ce677b83bdab09cda48bc2d89ac75aJust 427842e56b97ce677b83bdab09cda48bc2d89ac75aJust // Computes the rectangle for the native widget that contains the contents of 437842e56b97ce677b83bdab09cda48bc2d89ac75aJust // the tab in the screen coordinate system. 44319c5fd10e2ea84304bd299b7483e05b5b0d5480Behdad Esfahbod virtual void GetContainerBounds(gfx::Rect* out) const = 0; 457842e56b97ce677b83bdab09cda48bc2d89ac75aJust 467842e56b97ce677b83bdab09cda48bc2d89ac75aJust // TODO(brettw) this is a hack. It's used in two places at the time of this 477842e56b97ce677b83bdab09cda48bc2d89ac75aJust // writing: (1) when render view hosts switch, we need to size the replaced 48319c5fd10e2ea84304bd299b7483e05b5b0d5480Behdad Esfahbod // one to be correct, since it wouldn't have known about sizes that happened 497842e56b97ce677b83bdab09cda48bc2d89ac75aJust // while it was hidden; (2) in constrained windows. 507842e56b97ce677b83bdab09cda48bc2d89ac75aJust // 517842e56b97ce677b83bdab09cda48bc2d89ac75aJust // (1) will be fixed once interstitials are cleaned up. (2) seems like it 5218316aa769566eeb6f3f4a6ed2685fa8f8e861c2Behdad Esfahbod // should be cleaned up or done some other way, since this works for normal 537842e56b97ce677b83bdab09cda48bc2d89ac75aJust // WebContents without the special code. 547842e56b97ce677b83bdab09cda48bc2d89ac75aJust virtual void SizeContents(const gfx::Size& size) = 0; 557842e56b97ce677b83bdab09cda48bc2d89ac75aJust 5618316aa769566eeb6f3f4a6ed2685fa8f8e861c2Behdad Esfahbod // Sets focus to the native widget for this tab. 577842e56b97ce677b83bdab09cda48bc2d89ac75aJust virtual void Focus() = 0; 587842e56b97ce677b83bdab09cda48bc2d89ac75aJust 5995c9e9fc11dc028bd1747788f2b417f3936fc59bjvr // Sets focus to the appropriate element when the WebContents is shown the 6018316aa769566eeb6f3f4a6ed2685fa8f8e861c2Behdad Esfahbod // first time. 6132c10eecffb4923e0721c395e4b80fb732543f18Behdad Esfahbod virtual void SetInitialFocus() = 0; 6295c9e9fc11dc028bd1747788f2b417f3936fc59bjvr 637842e56b97ce677b83bdab09cda48bc2d89ac75aJust // Stores the currently focused view. 647842e56b97ce677b83bdab09cda48bc2d89ac75aJust virtual void StoreFocus() = 0; 65ac1b4359467ca3deab03186a15eae1d55eb35567Behdad Esfahbod 66319c5fd10e2ea84304bd299b7483e05b5b0d5480Behdad Esfahbod // Restores focus to the last focus view. If StoreFocus has not yet been 677842e56b97ce677b83bdab09cda48bc2d89ac75aJust // invoked, SetInitialFocus is invoked. 687842e56b97ce677b83bdab09cda48bc2d89ac75aJust virtual void RestoreFocus() = 0; 697842e56b97ce677b83bdab09cda48bc2d89ac75aJust 707842e56b97ce677b83bdab09cda48bc2d89ac75aJust // Returns the current drop data, if any. 717842e56b97ce677b83bdab09cda48bc2d89ac75aJust virtual DropData* GetDropData() const = 0; 727842e56b97ce677b83bdab09cda48bc2d89ac75aJust 737842e56b97ce677b83bdab09cda48bc2d89ac75aJust // Get the bounds of the View, relative to the parent. 747842e56b97ce677b83bdab09cda48bc2d89ac75aJust virtual gfx::Rect GetViewBounds() const = 0; 757842e56b97ce677b83bdab09cda48bc2d89ac75aJust 76455af6592bffbd6f2fc9f56fbfe083022a8353d4jvr virtual void CreateView( 777842e56b97ce677b83bdab09cda48bc2d89ac75aJust const gfx::Size& initial_size, gfx::NativeView context) = 0; 787842e56b97ce677b83bdab09cda48bc2d89ac75aJust 79dbc2c173b35360386c907a3c70cb931ae4c3fac9jvr // Sets up the View that holds the rendered web page, receives messages for 80455af6592bffbd6f2fc9f56fbfe083022a8353d4jvr // it and contains page plugins. The host view should be sized to the current 81455af6592bffbd6f2fc9f56fbfe083022a8353d4jvr // size of the WebContents. 827842e56b97ce677b83bdab09cda48bc2d89ac75aJust virtual RenderWidgetHostViewBase* CreateViewForWidget( 837842e56b97ce677b83bdab09cda48bc2d89ac75aJust RenderWidgetHost* render_widget_host) = 0; 84455af6592bffbd6f2fc9f56fbfe083022a8353d4jvr 85455af6592bffbd6f2fc9f56fbfe083022a8353d4jvr // Creates a new View that holds a popup and receives messages for it. 86455af6592bffbd6f2fc9f56fbfe083022a8353d4jvr virtual RenderWidgetHostViewBase* CreateViewForPopupWidget( 87002c32fd0d869e280783777ec57916a9267aaea5Behdad Esfahbod RenderWidgetHost* render_widget_host) = 0; 88455af6592bffbd6f2fc9f56fbfe083022a8353d4jvr 897842e56b97ce677b83bdab09cda48bc2d89ac75aJust // Sets the page title for the native widgets corresponding to the view. This 90455af6592bffbd6f2fc9f56fbfe083022a8353d4jvr // is not strictly necessary and isn't expected to be displayed anywhere, but 91455af6592bffbd6f2fc9f56fbfe083022a8353d4jvr // can aid certain debugging tools such as Spy++ on Windows where you are 927842e56b97ce677b83bdab09cda48bc2d89ac75aJust // trying to find a specific window. 937842e56b97ce677b83bdab09cda48bc2d89ac75aJust virtual void SetPageTitle(const base::string16& title) = 0; 947842e56b97ce677b83bdab09cda48bc2d89ac75aJust 957842e56b97ce677b83bdab09cda48bc2d89ac75aJust // Invoked when the WebContents is notified that the RenderView has been 967842e56b97ce677b83bdab09cda48bc2d89ac75aJust // fully created. 977842e56b97ce677b83bdab09cda48bc2d89ac75aJust virtual void RenderViewCreated(RenderViewHost* host) = 0; 987842e56b97ce677b83bdab09cda48bc2d89ac75aJust 997842e56b97ce677b83bdab09cda48bc2d89ac75aJust // Invoked when the WebContents is notified that the RenderView has been 1007842e56b97ce677b83bdab09cda48bc2d89ac75aJust // swapped in. 1017842e56b97ce677b83bdab09cda48bc2d89ac75aJust virtual void RenderViewSwappedIn(RenderViewHost* host) = 0; 1027842e56b97ce677b83bdab09cda48bc2d89ac75aJust 1037842e56b97ce677b83bdab09cda48bc2d89ac75aJust // Invoked to enable/disable overscroll gesture navigation. 1047842e56b97ce677b83bdab09cda48bc2d89ac75aJust virtual void SetOverscrollControllerEnabled(bool enabled) = 0; 1057842e56b97ce677b83bdab09cda48bc2d89ac75aJust 1067842e56b97ce677b83bdab09cda48bc2d89ac75aJust#if defined(OS_MACOSX) 1077842e56b97ce677b83bdab09cda48bc2d89ac75aJust // The web contents view assumes that its view will never be overlapped by 1087842e56b97ce677b83bdab09cda48bc2d89ac75aJust // another view (either partially or fully). This allows it to perform 1097842e56b97ce677b83bdab09cda48bc2d89ac75aJust // optimizations. If the view is in a view hierarchy where it might be 1107842e56b97ce677b83bdab09cda48bc2d89ac75aJust // overlapped by another view, notify the view by calling this with |true|. 1117842e56b97ce677b83bdab09cda48bc2d89ac75aJust virtual void SetAllowOverlappingViews(bool overlapping) = 0; 1127842e56b97ce677b83bdab09cda48bc2d89ac75aJust 1137842e56b97ce677b83bdab09cda48bc2d89ac75aJust // Returns true if overlapping views are allowed, false otherwise. 1147842e56b97ce677b83bdab09cda48bc2d89ac75aJust virtual bool GetAllowOverlappingViews() const = 0; 1157842e56b97ce677b83bdab09cda48bc2d89ac75aJust 1167842e56b97ce677b83bdab09cda48bc2d89ac75aJust // Allowing other views disables optimizations which assume that only a single 1177842e56b97ce677b83bdab09cda48bc2d89ac75aJust // WebContents is present. 1187842e56b97ce677b83bdab09cda48bc2d89ac75aJust virtual void SetAllowOtherViews(bool allow) = 0; 1197842e56b97ce677b83bdab09cda48bc2d89ac75aJust 1207842e56b97ce677b83bdab09cda48bc2d89ac75aJust // Returns true if other views are allowed, false otherwise. 1217099f4c0f9fbaf1a5c811113fdfd2404dee04361jvr virtual bool GetAllowOtherViews() const = 0; 1227099f4c0f9fbaf1a5c811113fdfd2404dee04361jvr 1237842e56b97ce677b83bdab09cda48bc2d89ac75aJust // If we close the tab while a UI control is in an event-tracking 1247842e56b97ce677b83bdab09cda48bc2d89ac75aJust // loop, the control may message freed objects and crash. 1257842e56b97ce677b83bdab09cda48bc2d89ac75aJust // WebContents::Close() calls IsEventTracking(), and if it returns 1267842e56b97ce677b83bdab09cda48bc2d89ac75aJust // true CloseTabAfterEventTracking() is called and the close is not 1277842e56b97ce677b83bdab09cda48bc2d89ac75aJust // completed. 1287842e56b97ce677b83bdab09cda48bc2d89ac75aJust virtual bool IsEventTracking() const = 0; 1297842e56b97ce677b83bdab09cda48bc2d89ac75aJust virtual void CloseTabAfterEventTracking() = 0; 1307842e56b97ce677b83bdab09cda48bc2d89ac75aJust#endif 1317842e56b97ce677b83bdab09cda48bc2d89ac75aJust}; 1327842e56b97ce677b83bdab09cda48bc2d89ac75aJust 1337842e56b97ce677b83bdab09cda48bc2d89ac75aJust} // namespace content 1347842e56b97ce677b83bdab09cda48bc2d89ac75aJust 1357842e56b97ce677b83bdab09cda48bc2d89ac75aJust#endif // CONTENT_BROWSER_WEB_CONTENTS_WEB_CONTENTS_VIEW_H_ 1367842e56b97ce677b83bdab09cda48bc2d89ac75aJust