15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// found in the LICENSE file.
45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef CONTENT_PUBLIC_BROWSER_WEB_CONTENTS_H_
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define CONTENT_PUBLIC_BROWSER_WEB_CONTENTS_H_
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include <set>
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "base/basictypes.h"
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "base/callback_forward.h"
125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "base/files/file_path.h"
135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "base/process/kill.h"
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "base/strings/string16.h"
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "base/supports_user_data.h"
165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "content/common/content_export.h"
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "content/public/browser/invalidate_type.h"
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "content/public/browser/navigation_controller.h"
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "content/public/browser/page_navigator.h"
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "content/public/browser/save_page_type.h"
215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "content/public/browser/web_ui.h"
225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "content/public/common/stop_find_action.h"
235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "ipc/ipc_sender.h"
245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "third_party/skia/include/core/SkColor.h"
255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "ui/base/window_open_disposition.h"
265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "ui/gfx/native_widget_types.h"
275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "ui/gfx/rect.h"
285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#if defined(OS_ANDROID)
3053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "base/android/scoped_java_ref.h"
315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif
325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
33d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)namespace base {
34d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)class DictionaryValue;
35d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)class TimeTicks;
3653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)}
3753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
3853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)namespace blink {
3953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)struct WebFindOptions;
4053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)}
411e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)
425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)namespace net {
435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)struct LoadStateWithParam;
445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
4509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
4609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)namespace content {
4709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
4809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)class BrowserContext;
4909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)class BrowserPluginGuestDelegate;
5009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)class InterstitialPage;
5109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)class PageState;
525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class RenderFrameHost;
53d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)class RenderProcessHost;
545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class RenderViewHost;
555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class RenderWidgetHostView;
5609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)class SiteInstance;
575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class WebContentsDelegate;
585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)struct CustomContextMenuContext;
595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)struct DropData;
605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)struct Manifest;
615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)struct RendererPreferences;
625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// WebContents is the core class in content/. A WebContents renders web content
645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// (usually HTML) in a rectangular area.
655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)//
665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Instantiating one is simple:
675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)//   scoped_ptr<content::WebContents> web_contents(
685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)//       content::WebContents::Create(
695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)//           content::WebContents::CreateParams(browser_context)));
70d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)//   gfx::NativeView view = web_contents->GetNativeView();
71d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)//   // |view| is an HWND, NSView*, GtkWidget*, etc.; insert it into the view
72d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)//   // hierarchy wherever it needs to go.
735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)//
745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// That's it; go to your kitchen, grab a scone, and chill. WebContents will do
755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// all the multi-process stuff behind the scenes. More details are at
765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// http://www.chromium.org/developers/design-documents/multi-process-architecture .
7709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)//
785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Each WebContents has exactly one NavigationController; each
795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// NavigationController belongs to one WebContents. The NavigationController can
805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// be obtained from GetController(), and is used to load URLs into the
815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// WebContents, navigate it backwards/forwards, etc. See navigation_controller.h
825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// for more details.
835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class WebContents : public PageNavigator,
845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                    public IPC::Sender,
855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                    public base::SupportsUserData {
865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) public:
875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  struct CONTENT_EXPORT CreateParams {
8809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    explicit CreateParams(BrowserContext* context);
895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ~CreateParams();
905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    CreateParams(BrowserContext* context, SiteInstance* site);
91d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    BrowserContext* browser_context;
93926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Specifying a SiteInstance here is optional.  It can be set to avoid an
955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // extra process swap if the first navigation is expected to require a
9609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    // privileged process.
975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    SiteInstance* site_instance;
985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    // The opener WebContents is the WebContents that initiated this request,
1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // if any.
1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    WebContents* opener;
10209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // If the opener is suppressed, then the new WebContents doesn't hold a
1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // reference to its opener.
10509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    bool opener_suppressed;
1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    int routing_id;
1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    int main_frame_routing_id;
1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Initial size of the new WebContent's view. Can be (0, 0) if not needed.
1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    gfx::Size initial_size;
11109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // True if the contents should be initially hidden.
11309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    bool initially_hidden;
1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // If non-null then this WebContents will be hosted by a BrowserPlugin.
11609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    BrowserPluginGuestDelegate* guest_delegate;
1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
11809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    // Used to specify the location context which display the new view should
1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // belong. This can be NULL if not needed.
1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    gfx::NativeView context;
12109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)  };
1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Creates a new WebContents.
12409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)  CONTENT_EXPORT static WebContents* Create(const CreateParams& params);
1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Similar to Create() above but should be used when you need to prepopulate
12709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)  // the SessionStorageNamespaceMap of the WebContents. This can happen if
1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // you duplicate a WebContents, try to reconstitute it from a saved state,
12909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)  // or when you create a new WebContents based on another one (eg., when
1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // servicing a window.open() call).
1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  //
1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // You do not want to call this. If you think you do, make sure you completely
1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // understand when SessionStorageNamespace objects should be cloned, why
1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // they should not be shared by multiple WebContents, and what bad things
1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // can happen if you share the object.
1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  CONTENT_EXPORT static WebContents* CreateWithSessionStorage(
1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)      const CreateParams& params,
1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)      const SessionStorageNamespaceMap& session_storage_namespace_map);
13909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Returns a WebContents that wraps the RenderViewHost, or NULL if the
1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // render view host's delegate isn't a WebContents.
1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  CONTENT_EXPORT static WebContents* FromRenderViewHost(
14309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)      const RenderViewHost* rvh);
14409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  CONTENT_EXPORT static WebContents* FromRenderFrameHost(RenderFrameHost* rfh);
146a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch
1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual ~WebContents() {}
14809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Intrinsic tab state -------------------------------------------------------
150a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch
1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Gets/Sets the delegate.
15209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)  virtual WebContentsDelegate* GetDelegate() = 0;
1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual void SetDelegate(WebContentsDelegate* delegate) = 0;
1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Gets the controller for this WebContents.
15609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)  virtual NavigationController& GetController() = 0;
1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual const NavigationController& GetController() const = 0;
1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Returns the user browser context associated with this WebContents (via the
1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // NavigationController).
1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual content::BrowserContext* GetBrowserContext() const = 0;
1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Gets the URL that is currently being displayed, if there is one.
1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // This method is deprecated. DO NOT USE! Pick either |GetVisibleURL| or
1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // |GetLastCommittedURL| as appropriate.
1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual const GURL& GetURL() const = 0;
1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
16809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)  // Gets the URL currently being displayed in the URL bar, if there is one.
16909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)  // This URL might be a pending navigation that hasn't committed yet, so it is
1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // not guaranteed to match the current page in this WebContents. A typical
17109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)  // example of this is interstitials, which show the URL of the new/loading
17209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)  // page (active) but the security context is of the old page (last committed).
1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual const GURL& GetVisibleURL() const = 0;
17409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
17509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)  // Gets the last committed URL. It represents the current page that is
1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // displayed in this WebContents. It represents the current security
1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // context.
1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual const GURL& GetLastCommittedURL() const = 0;
1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Return the currently active RenderProcessHost and RenderViewHost. Each of
1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // these may change over time.
1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual RenderProcessHost* GetRenderProcessHost() const = 0;
1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Returns the main frame for the currently active view.
1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual RenderFrameHost* GetMainFrame() = 0;
1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Returns the focused frame for the currently active view.
1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual RenderFrameHost* GetFocusedFrame() = 0;
1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
190a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch  // Calls |on_frame| for each frame in the currently active view.
191a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch  virtual void ForEachFrame(
1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)      const base::Callback<void(RenderFrameHost*)>& on_frame) = 0;
1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
194a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch  // Sends the given IPC to all frames in the currently active view. This is a
195a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch  // convenience method instead of calling ForEach.
196a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch  virtual void SendToAllFrames(IPC::Message* message) = 0;
197a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch
198a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch  // Gets the current RenderViewHost for this tab.
1995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual RenderViewHost* GetRenderViewHost() const = 0;
2005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
20109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)  // Gets the current RenderViewHost's routing id. Returns
2025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // MSG_ROUTING_NONE when there is no RenderViewHost.
20309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)  virtual int GetRoutingID() const = 0;
20409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
20509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)  // Returns the currently active RenderWidgetHostView. This may change over
20609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)  // time and can be NULL (during setup and teardown).
2075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual RenderWidgetHostView* GetRenderWidgetHostView() const = 0;
2085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Returns the currently active fullscreen widget. If there is none, returns
2105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // NULL.
2115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual RenderWidgetHostView* GetFullscreenRenderWidgetHostView() const = 0;
2125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Create a WebUI page for the given url. In most cases, this doesn't need to
2145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // be called by embedders since content will create its own WebUI objects as
2155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // necessary. However if the embedder wants to create its own WebUI object and
2165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // keep track of it manually, it can use this.
2175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual WebUI* CreateWebUI(const GURL& url) = 0;
2185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Returns the committed WebUI if one exists, otherwise the pending one.
2205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual WebUI* GetWebUI() const = 0;
2215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual WebUI* GetCommittedWebUI() const = 0;
2225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
223a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch  // Allows overriding the user agent used for NavigationEntries it owns.
224a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch  virtual void SetUserAgentOverride(const std::string& override) = 0;
2255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual const std::string& GetUserAgentOverride() const = 0;
2265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
22709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)  // Enable the accessibility tree for this WebContents in the renderer,
2285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // but don't enable creating a native accessibility tree on the browser
22909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)  // side.
2305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual void EnableTreeOnlyAccessibilityMode() = 0;
23109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
23209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)  // Returns true only if "tree only" accessibility mode is on.
2335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual bool IsTreeOnlyAccessibilityModeForTesting() const = 0;
23409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
2355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Returns true only if complete accessibility mode is on, meaning there's
23609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)  // both renderer accessibility, and a native browser accessibility tree.
2375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual bool IsFullAccessibilityModeForTesting() const = 0;
23809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
2395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#if defined(OS_WIN)
2405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual void SetParentNativeViewAccessible(
2415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)      gfx::NativeViewAccessible accessible_parent) = 0;
2425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif
2435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Tab navigation state ------------------------------------------------------
2455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Returns the current navigation properties, which if a navigation is
247a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch  // pending may be provisional (e.g., the navigation could result in a
248a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch  // download, in which case the URL would revert to what it was previously).
2495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual const base::string16& GetTitle() const = 0;
2505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
251a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch  // The max page ID for any page that the current SiteInstance has loaded in
252a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch  // this WebContents.  Page IDs are specific to a given SiteInstance and
2535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // WebContents, corresponding to a specific RenderView in the renderer.
2545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Page IDs increase with each new page that is loaded by a tab.
2555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual int32 GetMaxPageID() = 0;
256a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch
257a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch  // The max page ID for any page that the given SiteInstance has loaded in
2585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // this WebContents.
2595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual int32 GetMaxPageIDForSiteInstance(SiteInstance* site_instance) = 0;
260a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch
261a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch  // Returns the SiteInstance associated with the current page.
2625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual SiteInstance* GetSiteInstance() const = 0;
2635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
26409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)  // Returns the SiteInstance for the pending navigation, if any.  Otherwise
2655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // returns the current SiteInstance.
26609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)  virtual SiteInstance* GetPendingSiteInstance() const = 0;
26709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
268a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch  // Returns whether this WebContents is loading a resource.
26909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)  virtual bool IsLoading() const = 0;
270a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch
27109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)  // Returns whether this WebContents is loading and and the load is to a
272a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch  // different top-level document (rather than being a navigation within the
27309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)  // same document). This being true implies that IsLoading() is also true.
274a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch  virtual bool IsLoadingToDifferentDocument() const = 0;
2755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Returns whether this WebContents is waiting for a first-response for the
2775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // main resource of the page.
2785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual bool IsWaitingForResponse() const = 0;
2795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Returns the current load state and the URL associated with it.
2815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual const net::LoadStateWithParam& GetLoadState() const = 0;
2825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual const base::string16& GetLoadStateHost() const = 0;
2835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
28409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)  // Returns the upload progress.
2855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual uint64 GetUploadSize() const = 0;
2865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual uint64 GetUploadPosition() const = 0;
2875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Returns a set of the site URLs currently committed in this tab.
2898abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)  virtual std::set<GURL> GetSitesInTab() const = 0;
2905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Returns the character encoding of the page.
2925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual const std::string& GetEncoding() const = 0;
2935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // True if this is a secure page which displayed insecure content.
2955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual bool DisplayedInsecureContent() const = 0;
2965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Internal state ------------------------------------------------------------
2985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Indicates whether the WebContents is being captured (e.g., for screenshots
30009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)  // or mirroring).  Increment calls must be balanced with an equivalent number
30109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)  // of decrement calls.  |capture_size| specifies the capturer's video
302f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)  // resolution, but can be empty to mean "unspecified."  The first screen
303f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)  // capturer that provides a non-empty |capture_size| will override the value
3045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // returned by GetPreferredSize() until all captures have ended.
30509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)  virtual void IncrementCapturerCount(const gfx::Size& capture_size) = 0;
306f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)  virtual void DecrementCapturerCount() = 0;
3075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual int GetCapturerCount() const = 0;
30809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
309f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)  // Indicates/Sets whether all audio output from this WebContents is muted.
310f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)  virtual bool IsAudioMuted() const = 0;
3115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual void SetAudioMuted(bool mute) = 0;
31209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
313f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)  // Indicates whether this tab should be considered crashed. The setter will
3145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // also notify the delegate when the flag is changed.
3155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual bool IsCrashed() const  = 0;
3165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual void SetIsCrashed(base::TerminationStatus status, int error_code) = 0;
3175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual base::TerminationStatus GetCrashedStatus() const = 0;
3195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Whether the tab is in the process of being destroyed.
3215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual bool IsBeingDestroyed() const = 0;
3225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Convenience method for notifying the delegate of a navigation state
3245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // change.
3255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual void NotifyNavigationStateChanged(InvalidateTypes changed_flags) = 0;
3265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Get the last time that the WebContents was made active (either when it was
3285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // created or shown with WasShown()).
3295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual base::TimeTicks GetLastActiveTime() const = 0;
330d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
3315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Invoked when the WebContents becomes shown/hidden.
3325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual void WasShown() = 0;
3335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual void WasHidden() = 0;
33409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
3355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Returns true if the before unload and unload listeners need to be
3365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // fired. The value of this changes over time. For example, if true and the
33709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)  // before unload listener is executed and allows the user to exit, then this
33809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)  // returns false.
339f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)  virtual bool NeedToFireBeforeUnload() = 0;
3405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
34109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)  // Runs the beforeunload handler for the main frame. See also ClosePage and
342f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)  // SwapOut in RenderViewHost, which run the unload handler.
3435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  //
34409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)  // |for_cross_site_transition| indicates whether this call is for the current
345f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)  // frame during a cross-process navigation. False means we're closing the
3465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // entire tab.
34709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)  //
348f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)  // TODO(creis): We should run the beforeunload handler for every frame that
3495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // has one.
3505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual void DispatchBeforeUnload(bool for_cross_site_transition) = 0;
3515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Commands ------------------------------------------------------------------
3535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Stop any pending navigation.
3555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual void Stop() = 0;
3565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Creates a new WebContents with the same state as this one. The returned
3585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // heap-allocated pointer is owned by the caller.
3595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual WebContents* Clone() = 0;
3605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
36109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)  // Reloads the focused frame.
3625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual void ReloadFocusedFrame(bool ignore_cache) = 0;
3635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Editing commands ----------------------------------------------------------
36509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
3665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual void Undo() = 0;
3675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual void Redo() = 0;
3685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual void Cut() = 0;
3695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual void Copy() = 0;
37009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)  virtual void CopyToFindPboard() = 0;
3715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual void Paste() = 0;
3725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual void PasteAndMatchStyle() = 0;
37309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)  virtual void Delete() = 0;
37409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)  virtual void SelectAll() = 0;
375e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)  virtual void Unselect() = 0;
3765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
37709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)  // Replaces the currently selected word or a word around the cursor.
3785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual void Replace(const base::string16& word) = 0;
379e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)
3805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Replaces the misspelling in the current selection.
38109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)  virtual void ReplaceMisspelling(const base::string16& word) = 0;
382e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)
3835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Let the renderer know that the menu has been closed.
38409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)  virtual void NotifyContextMenuClosed(
3855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)      const CustomContextMenuContext& context) = 0;
386e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)
3875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Executes custom context menu action that was provided from Blink.
3885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual void ExecuteCustomContextMenuCommand(
3895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)      int action, const CustomContextMenuContext& context) = 0;
3905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Views and focus -----------------------------------------------------------
3925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
393bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)  // Returns the native widget that contains the contents of the tab.
3945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual gfx::NativeView GetNativeView() = 0;
3955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Returns the native widget with the main content of the tab (i.e. the main
3975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // render view host, though there may be many popups in the tab as children of
3985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // the container).
3995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual gfx::NativeView GetContentNativeView() = 0;
4005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Returns the outermost native view. This will be used as the parent for
4025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // dialog boxes.
4035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual gfx::NativeWindow GetTopLevelNativeWindow() = 0;
4045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Computes the rectangle for the native widget that contains the contents of
4065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // the tab in the screen coordinate system.
4075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual gfx::Rect GetContainerBounds() = 0;
4085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Get the bounds of the View, relative to the parent.
4105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual gfx::Rect GetViewBounds() = 0;
4115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Returns the current drop data, if any.
4135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual DropData* GetDropData() = 0;
4145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Sets focus to the native widget for this tab.
4165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual void Focus() = 0;
4175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Sets focus to the appropriate element when the WebContents is shown the
4195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // first time.
4205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual void SetInitialFocus() = 0;
4215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Stores the currently focused view.
423d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)  virtual void StoreFocus() = 0;
4245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Restores focus to the last focus view. If StoreFocus has not yet been
4265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // invoked, SetInitialFocus is invoked.
4275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual void RestoreFocus() = 0;
42809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
4295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Focuses the first (last if |reverse| is true) element in the page.
4305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Invoked when this tab is getting the focus through tab traversal (|reverse|
4315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // is true when using Shift-Tab).
4325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual void FocusThroughTabTraversal(bool reverse) = 0;
4335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
43409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)  // Interstitials -------------------------------------------------------------
4355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
436c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)  // Various other systems need to know about our interstitials.
43709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)  virtual bool ShowingInterstitialPage() const = 0;
4385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Returns the currently showing interstitial, NULL if no interstitial is
4405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // showing.
4415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual InterstitialPage* GetInterstitialPage() const = 0;
44209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
4435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Misc state & callbacks ----------------------------------------------------
4445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Check whether we can do the saving page operation this page given its MIME
44609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)  // type.
4475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual bool IsSavable() = 0;
4485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Prepare for saving the current web page to disk.
4505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual void OnSavePage() = 0;
45109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
45209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)  // Save page with the main HTML file path, the directory for saving resources,
4535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // and the save type: HTML only or complete web page. Returns true if the
45409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)  // saving process has been initiated successfully.
4555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual bool SavePage(const base::FilePath& main_file,
45609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)                        const base::FilePath& dir_path,
4575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                        SavePageType save_type) = 0;
45809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
4595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Saves the given frame's URL to the local filesystem..
4605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual void SaveFrame(const GURL& url,
4615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                         const Referrer& referrer) = 0;
4625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Generate an MHTML representation of the current page in the given file.
4645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual void GenerateMHTML(
4655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)      const base::FilePath& file,
466d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)      const base::Callback<void(
4675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)          int64 /* size of the file */)>& callback) = 0;
4685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Returns the contents MIME type after a navigation.
4705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual const std::string& GetContentsMimeType() const = 0;
4715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
47209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)  // Returns true if this WebContents will notify about disconnection.
47309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)  virtual bool WillNotifyDisconnection() const = 0;
4745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
47509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)  // Override the encoding and reload the page by sending down
4765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // ViewMsg_SetPageEncoding to the renderer. |UpdateEncoding| is kinda
4775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // the opposite of this, by which 'browser' is notified of
4785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // the encoding of the current tab from 'renderer' (determined by
479d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)  // auto-detect, http header, meta, bom detection, etc).
4805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual void SetOverrideEncoding(const std::string& encoding) = 0;
48109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
48209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)  // Remove any user-defined override encoding and reload by sending down
4835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // ViewMsg_ResetPageEncodingToDefault to the renderer.
48409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)  virtual void ResetOverrideEncoding() = 0;
4855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
48609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)  // Returns the settings which get passed to the renderer.
4875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual content::RendererPreferences* GetMutableRendererPrefs() = 0;
48809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
4895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Tells the tab to close now. The tab will take care not to close until it's
4905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // out of nested message loops.
4915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual void Close() = 0;
4925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // A render view-originated drag has ended. Informs the render view host and
4945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // WebContentsDelegate.
4955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual void SystemDragEnded() = 0;
496d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
4975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Notification the user has made a gesture while focus was on the
4985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // page. This is used to avoid uninitiated user downloads (aka carpet
499d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)  // bombing), see DownloadRequestLimiter for details.
500926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)  virtual void UserGestureDone() = 0;
5015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Indicates if this tab was explicitly closed by the user (control-w, close
5035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // tab menu item...). This is false for actions that indirectly close the tab,
5045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // such as closing the window.  The setter is maintained by TabStripModel, and
5055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // the getter only useful from within TAB_CLOSED notification
5065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual void SetClosedByUserGesture(bool value) = 0;
5075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual bool GetClosedByUserGesture() const = 0;
5085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Opens view-source tab for this contents.
5105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual void ViewSource() = 0;
5115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5128abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)  virtual void ViewFrameSource(const GURL& url,
5135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                               const PageState& page_state)= 0;
5145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
515926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)  // Gets the minimum/maximum zoom percent.
5168abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)  virtual int GetMinimumZoomPercent() const = 0;
5175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual int GetMaximumZoomPercent() const = 0;
5185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Gets the preferred size of the contents.
5205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual gfx::Size GetPreferredSize() const = 0;
5215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Called when the reponse to a pending mouse lock request has arrived.
5235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Returns true if |allowed| is true and the mouse has been successfully
5245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // locked.
5255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual bool GotResponseToLockMouseRequest(bool allowed) = 0;
5265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Called when the user has selected a color in the color chooser.
528d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)  virtual void DidChooseColorInColorChooser(SkColor color) = 0;
5295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Called when the color chooser has ended.
5315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual void DidEndColorChooser() = 0;
5325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Returns true if the location bar should be focused by default rather than
5345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // the page contents. The view calls this function when the tab is focused
535a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch  // to see what it should do.
536a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch  virtual bool FocusLocationBarByDefault() = 0;
53709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
5385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Does this have an opener associated with it?
53909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)  virtual bool HasOpener() const = 0;
54009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
5415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  typedef base::Callback<void(
542a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch      int, /* id */
543a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch      int, /* HTTP status code */
544a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch      const GURL&, /* image_url */
545a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch      const std::vector<SkBitmap>&, /* bitmaps */
5465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)      /* The sizes in pixel of the bitmaps before they were resized due to the
54709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)         max bitmap size passed to DownloadImage(). Each entry in the bitmaps
5485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)         vector corresponds to an entry in the sizes vector. If a bitmap was
549a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch         resized, there should be a single returned bitmap. */
550a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch      const std::vector<gfx::Size>&)>
551a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch          ImageDownloadCallback;
552a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch
5535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Sends a request to download the given image |url| and returns the unique
55409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)  // id of the download request. When the download is finished, |callback| will
5555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // be called with the bitmaps received from the renderer. If |is_favicon| is
556a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch  // true, the cookies are not sent and not accepted during download.
557a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch  // Bitmaps with pixel sizes larger than |max_bitmap_size| are filtered out
558a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch  // from the bitmap results. If there are no bitmap results <=
559a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch  // |max_bitmap_size|, the smallest bitmap is resized to |max_bitmap_size| and
5605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // is the only result. A |max_bitmap_size| of 0 means unlimited.
56109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)  virtual int DownloadImage(const GURL& url,
5625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                            bool is_favicon,
563a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch                            uint32_t max_bitmap_size,
564a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch                            const ImageDownloadCallback& callback) = 0;
565a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch
566a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch  // Returns true if the WebContents is responsible for displaying a subframe
5675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // in a different process from its parent page.
5685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // TODO: this doesn't really belong here. With site isolation, this should be
5695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // removed since we can then embed iframes in different processes.
5705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual bool IsSubframe() const = 0;
5715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
57209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)  // Finds text on a page.
57309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)  virtual void Find(int request_id,
57409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)                    const base::string16& search_text,
5755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)                    const blink::WebFindOptions& options) = 0;
5765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
577a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch  // Notifies the renderer that the user has closed the FindInPage window
578a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch  // (and what action to take regarding the selection).
579a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch  virtual void StopFinding(StopFindAction action) = 0;
580a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch
5815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Requests the renderer to insert CSS into the main frame's document.
5825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual void InsertCSS(const std::string& css) = 0;
583a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch
584a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch  // Returns true if audio has recently been audible from the WebContents.
585a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch  virtual bool WasRecentlyAudible() = 0;
586a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch
5875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  typedef base::Callback<void(const Manifest&)> GetManifestCallback;
5885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Requests the Manifest of the main frame's document.
5905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual void GetManifest(const GetManifestCallback&) = 0;
5915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
59209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#if defined(OS_ANDROID)
59309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)  CONTENT_EXPORT static WebContents* FromJavaWebContents(
5945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)      jobject jweb_contents_android);
5955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  virtual base::android::ScopedJavaLocalRef<jobject> GetJavaWebContents() = 0;
596a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch#elif defined(OS_MACOSX)
597a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch  // Allowing other views disables optimizations which assume that only a single
598a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch  // WebContents is present.
599a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch  virtual void SetAllowOtherViews(bool allow) = 0;
6005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // Returns true if other views are allowed, false otherwise.
602a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch  virtual bool GetAllowOtherViews() = 0;
603a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch#endif  // OS_ANDROID
604a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch
605a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch private:
6065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  // This interface should only be implemented inside content.
6075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  friend class WebContentsImpl;
6085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  WebContents() {}
6095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)};
6105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}  // namespace content
6125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif  // CONTENT_PUBLIC_BROWSER_WEB_CONTENTS_H_
6145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)