1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
|
// 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 <set>
#include <string>
#include <vector>
#include "base/basictypes.h"
#include "base/memory/linked_ptr.h"
#include "base/memory/scoped_ptr.h"
#include "base/timer/timer.h"
#include "content/public/common/top_controls_state.h"
#include "content/public/renderer/render_view_observer.h"
#include "extensions/common/permissions/api_permission.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 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 bool allowWebGLDebugRendererInfo(WebKit::WebFrame* frame);
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 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 <meta http-equiv="refresh" ...> tag.
bool HasRefreshMetaTag(WebKit::WebFrame* frame);
// Save the JavaScript to preload if a ViewMsg_WebUIJavaScript is received.
scoped_ptr<WebUIJavaScript> 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<std::string> strict_security_hosts_;
// External host exposed through automation controller.
scoped_ptr<ExternalHostBindings> external_host_bindings_;
// A color page overlay when visually de-emaphasized.
scoped_ptr<WebViewColorOverlay> 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_
|