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 ContentSettingsObserver; 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SkBitmap; 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebViewColorOverlay; 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebViewAnimatingOverlay; 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace blink { 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebView; 2858e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdochstruct WebWindowFeatures; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace safe_browsing { 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PhishingClassifierDelegate; 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace translate { 361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass TranslateHelper; 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace web_cache { 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass WebCacheRenderProcessObserver; 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This class holds the Chrome specific parts of RenderView, and has the same 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// lifetime. 455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class ChromeRenderViewObserver : public content::RenderViewObserver { 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // translate_helper can be NULL. 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChromeRenderViewObserver( 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RenderView* render_view, 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci web_cache::WebCacheRenderProcessObserver* 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci web_cache_render_process_observer); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~ChromeRenderViewObserver(); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // RenderViewObserver implementation. 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void DidStartLoading() OVERRIDE; 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void DidStopLoading() OVERRIDE; 59c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual void DidCommitProvisionalLoad(blink::WebLocalFrame* frame, 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_new_navigation) OVERRIDE; 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Navigate(const GURL& url) OVERRIDE; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if !defined(OS_ANDROID) && !defined(OS_IOS) 64effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch void OnWebUIJavaScript(const base::string16& javascript); 65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(ENABLE_EXTENSIONS) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnSetVisuallyDeemphasized(bool deemphasized); 68116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 6990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#if defined(OS_ANDROID) 7090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) void OnUpdateTopControlsState(content::TopControlsState constraints, 7190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) content::TopControlsState current, 7290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) bool animate); 735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void OnRetrieveMetaTagContent(const GURL& expected_url, 745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string tag_name); 7590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#endif 761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void OnGetWebApplicationInfo(); 77116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void OnSetClientSidePhishingDetection(bool enable_phishing_detection); 78f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void OnSetWindowFeatures(const blink::WebWindowFeatures& window_features); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 80116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void CapturePageInfoLater(bool preliminary_capture, 8190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::TimeDelta delay); 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Captures the thumbnail and text contents for indexing for the given load 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ID. Kicks off analysis of the captured text. 85116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void CapturePageInfo(bool preliminary_capture); 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Retrieves the text from the given frame contents, the page text up to the 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // maximum amount kMaxIndexChars will be placed into the given buffer. 89a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void CaptureText(blink::WebFrame* frame, base::string16* contents); 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Determines if a host is in the strict security host set. 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsStrictSecurityHost(const std::string& host); 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Checks if a page contains <meta http-equiv="refresh" ...> tag. 95f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) bool HasRefreshMetaTag(blink::WebFrame* frame); 9690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Save the JavaScript to preload if a ViewMsg_WebUIJavaScript is received. 98cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) std::vector<base::string16> webui_javascript_; 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Owned by ChromeContentRendererClient and outlive us. 1011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci web_cache::WebCacheRenderProcessObserver* web_cache_render_process_observer_; 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Have the same lifetime as us. 1041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci translate::TranslateHelper* translate_helper_; 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) safe_browsing::PhishingClassifierDelegate* phishing_classifier_; 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A color page overlay when visually de-emaphasized. 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<WebViewColorOverlay> dimmed_color_overlay_; 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Used to delay calling CapturePageInfo. 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Timer capture_timer_; 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(ChromeRenderViewObserver); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_RENDERER_CHROME_RENDER_VIEW_OBSERVER_H_ 117