// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CHROME_RENDERER_CHROME_RENDER_VIEW_OBSERVER_H_ #define CHROME_RENDERER_CHROME_RENDER_VIEW_OBSERVER_H_ #include #include #include #include "base/basictypes.h" #include "base/memory/linked_ptr.h" #include "base/memory/scoped_ptr.h" #include "base/timer/timer.h" #include "chrome/common/extensions/permissions/api_permission.h" #include "content/public/common/top_controls_state.h" #include "content/public/renderer/render_view_observer.h" #include "third_party/WebKit/public/web/WebPermissionClient.h" #include "ui/gfx/size.h" #include "url/gurl.h" class ChromeRenderProcessObserver; class ContentSettingsObserver; class ExternalHostBindings; class SkBitmap; class TranslateHelper; class WebViewColorOverlay; class WebViewAnimatingOverlay; namespace extensions { class Dispatcher; class Extension; } namespace WebKit { class WebView; struct WebWindowFeatures; } namespace safe_browsing { class PhishingClassifierDelegate; } // This class holds the Chrome specific parts of RenderView, and has the same // lifetime. class ChromeRenderViewObserver : public content::RenderViewObserver, public WebKit::WebPermissionClient { public: // translate_helper can be NULL. ChromeRenderViewObserver( content::RenderView* render_view, ContentSettingsObserver* content_settings, ChromeRenderProcessObserver* chrome_render_process_observer, extensions::Dispatcher* extension_dispatcher); virtual ~ChromeRenderViewObserver(); private: // Holds the information received in OnWebUIJavaScript for later use // to call EvaluateScript() to preload javascript for WebUI tests. struct WebUIJavaScript { string16 frame_xpath; string16 jscript; int id; bool notify_result; }; // RenderViewObserver implementation. virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; virtual void DidStartLoading() OVERRIDE; virtual void DidStopLoading() OVERRIDE; virtual void DidCommitProvisionalLoad(WebKit::WebFrame* frame, bool is_new_navigation) OVERRIDE; virtual void DidClearWindowObject(WebKit::WebFrame* frame) OVERRIDE; virtual void DidHandleGestureEvent( const WebKit::WebGestureEvent& event) OVERRIDE; virtual void DetailedConsoleMessageAdded(const base::string16& message, const base::string16& source, const base::string16& stack_trace, int32 line_number, int32 severity_level) OVERRIDE; // WebKit::WebPermissionClient implementation. virtual bool allowDatabase(WebKit::WebFrame* frame, const WebKit::WebString& name, const WebKit::WebString& display_name, unsigned long estimated_size); virtual bool allowFileSystem(WebKit::WebFrame* frame); virtual bool allowImage(WebKit::WebFrame* frame, bool enabled_per_settings, const WebKit::WebURL& image_url); virtual bool allowIndexedDB(WebKit::WebFrame* frame, const WebKit::WebString& name, const WebKit::WebSecurityOrigin& origin); virtual bool allowPlugins(WebKit::WebFrame* frame, bool enabled_per_settings); virtual bool allowScript(WebKit::WebFrame* frame, bool enabled_per_settings); virtual bool allowScriptFromSource(WebKit::WebFrame* frame, bool enabled_per_settings, const WebKit::WebURL& script_url); virtual bool allowStorage(WebKit::WebFrame* frame, bool local); virtual bool allowReadFromClipboard(WebKit::WebFrame* frame, bool default_value); virtual bool allowWriteToClipboard(WebKit::WebFrame* frame, bool default_value); virtual bool allowWebComponents(const WebKit::WebDocument&, bool); virtual bool allowHTMLNotifications( const WebKit::WebDocument& document); virtual bool allowMutationEvents(const WebKit::WebDocument&, bool default_value); virtual bool allowPushState(const WebKit::WebDocument&); virtual void didNotAllowPlugins(WebKit::WebFrame* frame); virtual void didNotAllowScript(WebKit::WebFrame* frame); virtual bool allowDisplayingInsecureContent( WebKit::WebFrame* frame, bool allowed_per_settings, const WebKit::WebSecurityOrigin& context, const WebKit::WebURL& url); virtual bool allowRunningInsecureContent( WebKit::WebFrame* frame, bool allowed_per_settings, const WebKit::WebSecurityOrigin& context, const WebKit::WebURL& url); virtual void Navigate(const GURL& url) OVERRIDE; void OnWebUIJavaScript(const string16& frame_xpath, const string16& jscript, int id, bool notify_result); void OnHandleMessageFromExternalHost(const std::string& message, const std::string& origin, const std::string& target); void OnJavaScriptStressTestControl(int cmd, int param); void OnSetIsPrerendering(bool is_prerendering); void OnSetAllowDisplayingInsecureContent(bool allow); void OnSetAllowRunningInsecureContent(bool allow); void OnSetClientSidePhishingDetection(bool enable_phishing_detection); void OnSetVisuallyDeemphasized(bool deemphasized); void OnRequestThumbnailForContextNode(int thumbnail_min_area_pixels, gfx::Size thumbnail_max_size_pixels); void OnStartFrameSniffer(const string16& frame_name); void OnGetFPS(); void OnAddStrictSecurityHost(const std::string& host); void OnNPAPINotSupported(); #if defined(OS_ANDROID) void OnUpdateTopControlsState(content::TopControlsState constraints, content::TopControlsState current, bool animate); void OnRetrieveWebappInformation(const GURL& expected_url); #endif void OnSetWindowFeatures(const WebKit::WebWindowFeatures& window_features); void CapturePageInfoLater(int page_id, bool preliminary_capture, base::TimeDelta delay); // Captures the thumbnail and text contents for indexing for the given load // ID. Kicks off analysis of the captured text. void CapturePageInfo(int page_id, bool preliminary_capture); // Retrieves the text from the given frame contents, the page text up to the // maximum amount kMaxIndexChars will be placed into the given buffer. void CaptureText(WebKit::WebFrame* frame, string16* contents); ExternalHostBindings* GetExternalHostBindings(); // Determines if a host is in the strict security host set. bool IsStrictSecurityHost(const std::string& host); // If |origin| corresponds to an installed extension, returns that extension. // Otherwise returns NULL. const extensions::Extension* GetExtension( const WebKit::WebSecurityOrigin& origin) const; // Checks if a page contains tag. bool HasRefreshMetaTag(WebKit::WebFrame* frame); // Save the JavaScript to preload if a ViewMsg_WebUIJavaScript is received. scoped_ptr webui_javascript_; // Owned by ChromeContentRendererClient and outlive us. ChromeRenderProcessObserver* chrome_render_process_observer_; extensions::Dispatcher* extension_dispatcher_; // Have the same lifetime as us. ContentSettingsObserver* content_settings_; TranslateHelper* translate_helper_; safe_browsing::PhishingClassifierDelegate* phishing_classifier_; // Page_id from the last page we indexed. This prevents us from indexing the // same page twice in a row. int32 last_indexed_page_id_; // The toplevel URL that was last indexed. This is used together with the // page id to decide whether to reindex in certain cases like history // replacement. GURL last_indexed_url_; // Insecure content may be permitted for the duration of this render view. bool allow_displaying_insecure_content_; bool allow_running_insecure_content_; std::set strict_security_hosts_; // External host exposed through automation controller. scoped_ptr external_host_bindings_; // A color page overlay when visually de-emaphasized. scoped_ptr dimmed_color_overlay_; // Used to delay calling CapturePageInfo. base::Timer capture_timer_; DISALLOW_COPY_AND_ASSIGN(ChromeRenderViewObserver); }; #endif // CHROME_RENDERER_CHROME_RENDER_VIEW_OBSERVER_H_