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; 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Navigate(const GURL& url) OVERRIDE; 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 56effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch void OnWebUIJavaScript(const base::string16& javascript); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnSetClientSidePhishingDetection(bool enable_phishing_detection); 58cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void OnSetName(const std::string& name); 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnSetVisuallyDeemphasized(bool deemphasized); 6090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#if defined(OS_ANDROID) 6190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) void OnUpdateTopControlsState(content::TopControlsState constraints, 6290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) content::TopControlsState current, 6390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) bool animate); 643551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) void OnRetrieveWebappInformation(const GURL& expected_url); 655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void OnRetrieveMetaTagContent(const GURL& expected_url, 665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string tag_name); 6790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#endif 68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void OnSetWindowFeatures(const blink::WebWindowFeatures& window_features); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) void CapturePageInfoLater(int page_id, 7190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) bool preliminary_capture, 7290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::TimeDelta delay); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Captures the thumbnail and text contents for indexing for the given load 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ID. Kicks off analysis of the captured text. 7690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) void CapturePageInfo(int page_id, bool preliminary_capture); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Retrieves the text from the given frame contents, the page text up to the 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // maximum amount kMaxIndexChars will be placed into the given buffer. 80a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void CaptureText(blink::WebFrame* frame, base::string16* contents); 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Determines if a host is in the strict security host set. 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsStrictSecurityHost(const std::string& host); 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Checks if a page contains <meta http-equiv="refresh" ...> tag. 86f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) bool HasRefreshMetaTag(blink::WebFrame* frame); 8790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Save the JavaScript to preload if a ViewMsg_WebUIJavaScript is received. 89cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) std::vector<base::string16> webui_javascript_; 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Owned by ChromeContentRendererClient and outlive us. 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChromeRenderProcessObserver* chrome_render_process_observer_; 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Have the same lifetime as us. 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TranslateHelper* translate_helper_; 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) safe_browsing::PhishingClassifierDelegate* phishing_classifier_; 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Page_id from the last page we indexed. This prevents us from indexing the 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // same page twice in a row. 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32 last_indexed_page_id_; 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The toplevel URL that was last indexed. This is used together with the 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // page id to decide whether to reindex in certain cases like history 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // replacement. 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL last_indexed_url_; 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A color page overlay when visually de-emaphasized. 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<WebViewColorOverlay> dimmed_color_overlay_; 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Used to delay calling CapturePageInfo. 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Timer capture_timer_; 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(ChromeRenderViewObserver); 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_RENDERER_CHROME_RENDER_VIEW_OBSERVER_H_ 116