1eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Copyright 2013 The Chromium Authors. All rights reserved. 2eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// found in the LICENSE file. 4eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 5eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#ifndef CHROME_BROWSER_GUESTVIEW_WEBVIEW_WEBVIEW_GUEST_H_ 6eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#define CHROME_BROWSER_GUESTVIEW_WEBVIEW_WEBVIEW_GUEST_H_ 7eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 8eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/observer_list.h" 9eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "chrome/browser/extensions/tab_helper.h" 10eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "chrome/browser/guestview/guestview.h" 11eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "content/public/browser/notification_registrar.h" 12eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "content/public/browser/web_contents_observer.h" 13eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 14eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochnamespace extensions { 15eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass ScriptExecutor; 16eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} // namespace extensions 17eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 18eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// A WebViewGuest is a WebContentsObserver on the guest WebContents of a 19eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// <webview> tag. It provides the browser-side implementation of the <webview> 20eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// API and manages the lifetime of <webview> extension events. WebViewGuest is 21eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// created on attachment. That is, when a guest WebContents is associated with 22eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// a particular embedder WebContents. This happens on either initial navigation 23eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// or through the use of the New Window API, when a new window is attached to 24eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// a particular <webview>. 25eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass WebViewGuest : public GuestView, 26eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch public content::NotificationObserver, 27eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch public content::WebContentsObserver { 28eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch public: 290f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) WebViewGuest(content::WebContents* guest_web_contents, 300f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) const std::string& extension_id); 31eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 32eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch static WebViewGuest* From(int embedder_process_id, int instance_id); 334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) static WebViewGuest* FromWebContents(content::WebContents* contents); 34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 35eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // GuestView implementation. 36eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual void Attach(content::WebContents* embedder_web_contents, 37eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const base::DictionaryValue& args) OVERRIDE; 38eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual GuestView::Type GetViewType() const OVERRIDE; 39eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual WebViewGuest* AsWebView() OVERRIDE; 40eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual AdViewGuest* AsAdView() OVERRIDE; 41eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // GuestDelegate implementation. 437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual void AddMessageToConsole(int32 level, 44a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& message, 457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch int32 line_no, 46a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& source_id) OVERRIDE; 4758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual void LoadProgressed(double progress) OVERRIDE; 487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual void Close() OVERRIDE; 49a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual void DidAttach() OVERRIDE; 50d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) virtual void EmbedderDestroyed() OVERRIDE; 517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual void GuestProcessGone(base::TerminationStatus status) OVERRIDE; 527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual bool HandleKeyboardEvent( 537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const content::NativeWebKeyboardEvent& event) OVERRIDE; 54d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) virtual bool IsDragAndDropEnabled() OVERRIDE; 5568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) virtual bool IsOverridingUserAgent() const OVERRIDE; 563551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) virtual void LoadAbort(bool is_top_level, 573551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const GURL& url, 583551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const std::string& error_type) OVERRIDE; 5958e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch virtual void RendererResponsive() OVERRIDE; 6058e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch virtual void RendererUnresponsive() OVERRIDE; 61c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch virtual bool RequestPermission( 62c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch BrowserPluginPermissionType permission_type, 63c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch const base::DictionaryValue& request_info, 644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const PermissionResponseCallback& callback, 654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) bool allowed_by_default) OVERRIDE; 660f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) virtual GURL ResolveURL(const std::string& src) OVERRIDE; 673551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) virtual void SizeChanged(const gfx::Size& old_size, const gfx::Size& new_size) 683551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) OVERRIDE; 697dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 70eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // NotificationObserver implementation. 71eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual void Observe(int type, 72eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const content::NotificationSource& source, 73eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const content::NotificationDetails& details) OVERRIDE; 74eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 75eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // If possible, navigate the guest to |relative_index| entries away from the 76eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // current navigation entry. 77eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void Go(int relative_index); 78eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 797dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Reload the guest. 807dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch void Reload(); 817dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) enum PermissionResponseAction { 834e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) DENY, 844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ALLOW, 854e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) DEFAULT 864e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) }; 874e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 884e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) enum SetPermissionResult { 894e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) SET_PERMISSION_INVALID, 904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) SET_PERMISSION_ALLOWED, 914e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) SET_PERMISSION_DENIED 924e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) }; 934e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 944e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Responds to the permission request |request_id| with |action| and 95c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch // |user_input|. Returns whether there was a pending request for the provided 96c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch // |request_id|. 974e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) SetPermissionResult SetPermission(int request_id, 984e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) PermissionResponseAction action, 994e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& user_input); 100c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch 10168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // Overrides the user agent for this guest. 10268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // This affects subsequent guest navigations. 10368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) void SetUserAgentOverride(const std::string& user_agent_override); 10468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 1057dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Stop loading the guest. 1067dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch void Stop(); 1077dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1087dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Kill the guest process. 1097dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch void Terminate(); 1107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1113551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // Clears data in the storage partition of this guest. 1123551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // 1133551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // Partition data that are newer than |removal_since| will be removed. 1143551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // |removal_mask| corresponds to bitmask in StoragePartition::RemoveDataMask. 1153551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) bool ClearData(const base::Time remove_since, 1163551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) uint32 removal_mask, 1173551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const base::Closure& callback); 1183551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 119eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch extensions::ScriptExecutor* script_executor() { 120eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return script_executor_.get(); 121eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 122eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 123eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch private: 124eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual ~WebViewGuest(); 125eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 126f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // A map to store the callback for a request keyed by the request's id. 127f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) struct PermissionResponseInfo { 128f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) PermissionResponseCallback callback; 129f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) BrowserPluginPermissionType permission_type; 130f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) bool allowed_by_default; 131f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) PermissionResponseInfo(); 132f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) PermissionResponseInfo(const PermissionResponseCallback& callback, 133f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) BrowserPluginPermissionType permission_type, 134f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) bool allowed_by_default); 135f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ~PermissionResponseInfo(); 136f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) }; 137f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 138f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) static void RecordUserInitiatedUMA(const PermissionResponseInfo& info, 139f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) bool allow); 140eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // WebContentsObserver implementation. 141eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual void DidCommitProvisionalLoadForFrame( 142eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int64 frame_id, 143a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& frame_unique_name, 144eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch bool is_main_frame, 145eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const GURL& url, 146eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch content::PageTransition transition_type, 147eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch content::RenderViewHost* render_view_host) OVERRIDE; 1487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual void DidFailProvisionalLoad( 1497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch int64 frame_id, 150a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& frame_unique_name, 1517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch bool is_main_frame, 1527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const GURL& validated_url, 1537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch int error_code, 154a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& error_description, 1557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch content::RenderViewHost* render_view_host) OVERRIDE; 156eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual void DidStartProvisionalLoadForFrame( 157eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int64 frame_id, 158eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int64 parent_frame_id, 159eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch bool is_main_frame, 160eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const GURL& validated_url, 161eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch bool is_error_page, 162eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch bool is_iframe_srcdoc, 163eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch content::RenderViewHost* render_view_host) OVERRIDE; 164eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual void DidStopLoading( 165eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch content::RenderViewHost* render_view_host) OVERRIDE; 166eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual void WebContentsDestroyed( 167eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch content::WebContents* web_contents) OVERRIDE; 168a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual void UserAgentOverrideSet(const std::string& user_agent) OVERRIDE; 169eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 170eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Called after the load handler is called in the guest's main frame. 171eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void LoadHandlerCalled(); 172eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 173eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Called when a redirect notification occurs. 174eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void LoadRedirect(const GURL& old_url, 175eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const GURL& new_url, 176eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch bool is_top_level); 177eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 1780f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) static bool AllowChromeExtensionURLs(); 1790f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 180eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void AddWebViewToExtensionRendererState(); 181eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch static void RemoveWebViewFromExtensionRendererState( 182eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch content::WebContents* web_contents); 183eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 184eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ObserverList<extensions::TabHelper::ScriptExecutionObserver> 185eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch script_observers_; 186eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_ptr<extensions::ScriptExecutor> script_executor_; 187eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 188eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch content::NotificationRegistrar notification_registrar_; 189eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 190c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch // A counter to generate a unique request id for a permission request. 191c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch // We only need the ids to be unique for a given WebViewGuest. 192c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch int next_permission_request_id_; 193c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch 1944e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) typedef std::map<int, PermissionResponseInfo> RequestMap; 195c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch RequestMap pending_permission_requests_; 196c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch 19768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // True if the user agent is overridden. 19868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) bool is_overriding_user_agent_; 19968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 200a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Indicates that the page needs to be reloaded once it has been attached to 201a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // an embedder. 202a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) bool pending_reload_on_attachment_; 203a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 204eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DISALLOW_COPY_AND_ASSIGN(WebViewGuest); 205eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}; 206eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 207eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#endif // CHROME_BROWSER_GUESTVIEW_WEBVIEW_WEBVIEW_GUEST_H_ 208