chrome_render_view_observer.h revision c5cede9ae108bb15f6b7a8aea21c7e1fefa2834c
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_RENDERER_CHROME_RENDER_VIEW_OBSERVER_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_RENDERER_CHROME_RENDER_VIEW_OBSERVER_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <set> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "base/basictypes.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/linked_ptr.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 15eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/timer/timer.h" 1690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "content/public/common/top_controls_state.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/renderer/render_view_observer.h" 18a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "ui/gfx/size.h" 197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "url/gurl.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ChromeRenderProcessObserver; 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ContentSettingsObserver; 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SkBitmap; 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TranslateHelper; 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebViewColorOverlay; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebViewAnimatingOverlay; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace blink { 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebView; 3058e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdochstruct WebWindowFeatures; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace safe_browsing { 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PhishingClassifierDelegate; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This class holds the Chrome specific parts of RenderView, and has the same 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// lifetime. 395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class ChromeRenderViewObserver : public content::RenderViewObserver { 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // translate_helper can be NULL. 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChromeRenderViewObserver( 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RenderView* render_view, 445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ChromeRenderProcessObserver* chrome_render_process_observer); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~ChromeRenderViewObserver(); 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // RenderViewObserver implementation. 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void DidStartLoading() OVERRIDE; 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void DidStopLoading() OVERRIDE; 52c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual void DidCommitProvisionalLoad(blink::WebLocalFrame* frame, 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_new_navigation) OVERRIDE; 5458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual void DetailedConsoleMessageAdded(const base::string16& message, 5558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const base::string16& source, 5658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const base::string16& stack_trace, 5758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) int32 line_number, 5858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) int32 severity_level) OVERRIDE; 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Navigate(const GURL& url) OVERRIDE; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 61effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch void OnWebUIJavaScript(const base::string16& javascript); 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnSetClientSidePhishingDetection(bool enable_phishing_detection); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnSetVisuallyDeemphasized(bool deemphasized); 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnGetFPS(); 6590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#if defined(OS_ANDROID) 6690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) void OnUpdateTopControlsState(content::TopControlsState constraints, 6790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) content::TopControlsState current, 6890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) bool animate); 693551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) void OnRetrieveWebappInformation(const GURL& expected_url); 705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void OnRetrieveMetaTagContent(const GURL& expected_url, 715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string tag_name); 7290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#endif 73f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void OnSetWindowFeatures(const blink::WebWindowFeatures& window_features); 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) void CapturePageInfoLater(int page_id, 7690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) bool preliminary_capture, 7790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::TimeDelta delay); 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Captures the thumbnail and text contents for indexing for the given load 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ID. Kicks off analysis of the captured text. 8190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) void CapturePageInfo(int page_id, bool preliminary_capture); 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Retrieves the text from the given frame contents, the page text up to the 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // maximum amount kMaxIndexChars will be placed into the given buffer. 85a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void CaptureText(blink::WebFrame* frame, base::string16* contents); 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Determines if a host is in the strict security host set. 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsStrictSecurityHost(const std::string& host); 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Checks if a page contains <meta http-equiv="refresh" ...> tag. 91f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) bool HasRefreshMetaTag(blink::WebFrame* frame); 9290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Save the JavaScript to preload if a ViewMsg_WebUIJavaScript is received. 94effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch base::string16 webui_javascript_; 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Owned by ChromeContentRendererClient and outlive us. 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChromeRenderProcessObserver* chrome_render_process_observer_; 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Have the same lifetime as us. 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TranslateHelper* translate_helper_; 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) safe_browsing::PhishingClassifierDelegate* phishing_classifier_; 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Page_id from the last page we indexed. This prevents us from indexing the 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // same page twice in a row. 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32 last_indexed_page_id_; 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The toplevel URL that was last indexed. This is used together with the 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // page id to decide whether to reindex in certain cases like history 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // replacement. 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL last_indexed_url_; 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A color page overlay when visually de-emaphasized. 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<WebViewColorOverlay> dimmed_color_overlay_; 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Used to delay calling CapturePageInfo. 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Timer capture_timer_; 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(ChromeRenderViewObserver); 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_RENDERER_CHROME_RENDER_VIEW_OBSERVER_H_ 121