Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(596)

Side by Side Diff: chrome/renderer/chrome_render_view_observer.cc

Issue 6873014: Clear RenderThread of any Chrome specific code, and move a bunch of stuff out of RenderView. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/renderer/chrome_render_observer.h" 5 #include "chrome/renderer/chrome_render_view_observer.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/message_loop.h" 8 #include "base/message_loop.h"
9 #include "base/metrics/histogram.h" 9 #include "base/metrics/histogram.h"
10 #include "chrome/common/chrome_switches.h" 10 #include "chrome/common/chrome_switches.h"
11 #include "chrome/common/render_messages.h" 11 #include "chrome/common/render_messages.h"
12 #include "chrome/common/thumbnail_score.h" 12 #include "chrome/common/thumbnail_score.h"
13 #include "chrome/renderer/about_handler.h"
13 #include "chrome/renderer/safe_browsing/phishing_classifier_delegate.h" 14 #include "chrome/renderer/safe_browsing/phishing_classifier_delegate.h"
14 #include "chrome/renderer/translate_helper.h" 15 #include "chrome/renderer/translate_helper.h"
16 #include "content/common/view_messages.h"
15 #include "content/renderer/content_renderer_client.h" 17 #include "content/renderer/content_renderer_client.h"
16 #include "content/renderer/render_view.h" 18 #include "content/renderer/render_view.h"
17 #include "skia/ext/bitmap_platform_device.h" 19 #include "skia/ext/bitmap_platform_device.h"
18 #include "skia/ext/image_operations.h" 20 #include "skia/ext/image_operations.h"
19 #include "skia/ext/platform_canvas.h" 21 #include "skia/ext/platform_canvas.h"
20 #include "third_party/WebKit/Source/WebKit/chromium/public/WebDataSource.h" 22 #include "third_party/WebKit/Source/WebKit/chromium/public/WebDataSource.h"
21 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h" 23 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h"
22 #include "third_party/WebKit/Source/WebKit/chromium/public/WebRect.h" 24 #include "third_party/WebKit/Source/WebKit/chromium/public/WebRect.h"
23 #include "third_party/WebKit/Source/WebKit/chromium/public/WebSize.h" 25 #include "third_party/WebKit/Source/WebKit/chromium/public/WebSize.h"
24 #include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h" 26 #include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h"
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
76 // bitmap are all the same brightness. 78 // bitmap are all the same brightness.
77 static double CalculateBoringScore(SkBitmap* bitmap) { 79 static double CalculateBoringScore(SkBitmap* bitmap) {
78 int histogram[256] = {0}; 80 int histogram[256] = {0};
79 color_utils::BuildLumaHistogram(bitmap, histogram); 81 color_utils::BuildLumaHistogram(bitmap, histogram);
80 82
81 int color_count = *std::max_element(histogram, histogram + 256); 83 int color_count = *std::max_element(histogram, histogram + 256);
82 int pixel_count = bitmap->width() * bitmap->height(); 84 int pixel_count = bitmap->width() * bitmap->height();
83 return static_cast<double>(color_count) / pixel_count; 85 return static_cast<double>(color_count) / pixel_count;
84 } 86 }
85 87
86 ChromeRenderObserver::ChromeRenderObserver( 88 ChromeRenderViewObserver::ChromeRenderViewObserver(
87 RenderView* render_view, 89 RenderView* render_view,
88 TranslateHelper* translate_helper, 90 TranslateHelper* translate_helper,
89 safe_browsing::PhishingClassifierDelegate* phishing_classifier) 91 safe_browsing::PhishingClassifierDelegate* phishing_classifier)
90 : RenderViewObserver(render_view), 92 : RenderViewObserver(render_view),
91 translate_helper_(translate_helper), 93 translate_helper_(translate_helper),
92 phishing_classifier_(phishing_classifier), 94 phishing_classifier_(phishing_classifier),
93 last_indexed_page_id_(-1), 95 last_indexed_page_id_(-1),
94 ALLOW_THIS_IN_INITIALIZER_LIST(page_info_method_factory_(this)) { 96 ALLOW_THIS_IN_INITIALIZER_LIST(page_info_method_factory_(this)) {
95 } 97 }
96 98
97 ChromeRenderObserver::~ChromeRenderObserver() { 99 ChromeRenderViewObserver::~ChromeRenderViewObserver() {
98 } 100 }
99 101
100 bool ChromeRenderObserver::OnMessageReceived(const IPC::Message& message) { 102 bool ChromeRenderViewObserver::OnMessageReceived(const IPC::Message& message) {
101 bool handled = true; 103 bool handled = true;
102 IPC_BEGIN_MESSAGE_MAP(ChromeRenderObserver, message) 104 IPC_BEGIN_MESSAGE_MAP(ChromeRenderViewObserver, message)
103 IPC_MESSAGE_HANDLER(ViewMsg_CaptureSnapshot, OnCaptureSnapshot) 105 IPC_MESSAGE_HANDLER(ViewMsg_CaptureSnapshot, OnCaptureSnapshot)
104 IPC_MESSAGE_UNHANDLED(handled = false) 106 IPC_MESSAGE_UNHANDLED(handled = false)
105 IPC_END_MESSAGE_MAP() 107 IPC_END_MESSAGE_MAP()
108
109 // Filter only.
110 IPC_BEGIN_MESSAGE_MAP(ChromeRenderViewObserver, message)
111 IPC_MESSAGE_HANDLER(ViewMsg_Navigate, OnNavigate)
112 IPC_END_MESSAGE_MAP()
113
106 return handled; 114 return handled;
107 } 115 }
108 116
109 void ChromeRenderObserver::OnCaptureSnapshot() { 117 void ChromeRenderViewObserver::OnCaptureSnapshot() {
110 SkBitmap snapshot; 118 SkBitmap snapshot;
111 bool error = false; 119 bool error = false;
112 120
113 WebFrame* main_frame = render_view()->webview()->mainFrame(); 121 WebFrame* main_frame = render_view()->webview()->mainFrame();
114 if (!main_frame) 122 if (!main_frame)
115 error = true; 123 error = true;
116 124
117 if (!error && !CaptureSnapshot(render_view()->webview(), &snapshot)) 125 if (!error && !CaptureSnapshot(render_view()->webview(), &snapshot))
118 error = true; 126 error = true;
119 127
120 DCHECK(error == snapshot.empty()) << 128 DCHECK(error == snapshot.empty()) <<
121 "Snapshot should be empty on error, non-empty otherwise."; 129 "Snapshot should be empty on error, non-empty otherwise.";
122 130
123 // Send the snapshot to the browser process. 131 // Send the snapshot to the browser process.
124 Send(new ViewHostMsg_Snapshot(routing_id(), snapshot)); 132 Send(new ViewHostMsg_Snapshot(routing_id(), snapshot));
125 } 133 }
126 134
127 void ChromeRenderObserver::DidStopLoading() { 135 void ChromeRenderViewObserver::OnNavigate(
136 const ViewMsg_Navigate_Params& params) {
137 AboutHandler::MaybeHandle(params.url);
138 }
139
140 void ChromeRenderViewObserver::DidStopLoading() {
128 MessageLoop::current()->PostDelayedTask( 141 MessageLoop::current()->PostDelayedTask(
129 FROM_HERE, 142 FROM_HERE,
130 page_info_method_factory_.NewRunnableMethod( 143 page_info_method_factory_.NewRunnableMethod(
131 &ChromeRenderObserver::CapturePageInfo, render_view()->page_id(), 144 &ChromeRenderViewObserver::CapturePageInfo, render_view()->page_id(),
132 false), 145 false),
133 render_view()->content_state_immediately() ? 0 : kDelayForCaptureMs); 146 render_view()->content_state_immediately() ? 0 : kDelayForCaptureMs);
134 } 147 }
135 148
136 void ChromeRenderObserver::DidCommitProvisionalLoad(WebFrame* frame, 149 void ChromeRenderViewObserver::DidCommitProvisionalLoad(
137 bool is_new_navigation) { 150 WebFrame* frame, bool is_new_navigation) {
138 if (!is_new_navigation) 151 if (!is_new_navigation)
139 return; 152 return;
140 153
141 MessageLoop::current()->PostDelayedTask( 154 MessageLoop::current()->PostDelayedTask(
142 FROM_HERE, 155 FROM_HERE,
143 page_info_method_factory_.NewRunnableMethod( 156 page_info_method_factory_.NewRunnableMethod(
144 &ChromeRenderObserver::CapturePageInfo, render_view()->page_id(), 157 &ChromeRenderViewObserver::CapturePageInfo, render_view()->page_id(),
145 true), 158 true),
146 kDelayForForcedCaptureMs); 159 kDelayForForcedCaptureMs);
147 } 160 }
148 161
149 void ChromeRenderObserver::CapturePageInfo(int load_id, 162 void ChromeRenderViewObserver::CapturePageInfo(int load_id,
150 bool preliminary_capture) { 163 bool preliminary_capture) {
151 if (load_id != render_view()->page_id()) 164 if (load_id != render_view()->page_id())
152 return; // This capture call is no longer relevant due to navigation. 165 return; // This capture call is no longer relevant due to navigation.
153 166
154 if (load_id == last_indexed_page_id_) 167 if (load_id == last_indexed_page_id_)
155 return; // we already indexed this page 168 return; // we already indexed this page
156 169
157 if (!render_view()->webview()) 170 if (!render_view()->webview())
158 return; 171 return;
159 172
160 WebFrame* main_frame = render_view()->webview()->mainFrame(); 173 WebFrame* main_frame = render_view()->webview()->mainFrame();
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
196 if (!CommandLine::ForCurrentProcess()->HasSwitch( 209 if (!CommandLine::ForCurrentProcess()->HasSwitch(
197 switches::kEnableInBrowserThumbnailing)) { 210 switches::kEnableInBrowserThumbnailing)) {
198 CaptureThumbnail(); 211 CaptureThumbnail();
199 } 212 }
200 213
201 // Will swap out the string. 214 // Will swap out the string.
202 if (phishing_classifier_) 215 if (phishing_classifier_)
203 phishing_classifier_->PageCaptured(&contents, preliminary_capture); 216 phishing_classifier_->PageCaptured(&contents, preliminary_capture);
204 } 217 }
205 218
206 void ChromeRenderObserver::CaptureText(WebFrame* frame, string16* contents) { 219 void ChromeRenderViewObserver::CaptureText(WebFrame* frame,
220 string16* contents) {
207 contents->clear(); 221 contents->clear();
208 if (!frame) 222 if (!frame)
209 return; 223 return;
210 224
211 #ifdef TIME_TEXT_RETRIEVAL 225 #ifdef TIME_TEXT_RETRIEVAL
212 double begin = time_util::GetHighResolutionTimeNow(); 226 double begin = time_util::GetHighResolutionTimeNow();
213 #endif 227 #endif
214 228
215 // get the contents of the frame 229 // get the contents of the frame
216 *contents = frame->contentAsText(kMaxIndexChars); 230 *contents = frame->contentAsText(kMaxIndexChars);
(...skipping 10 matching lines...) Expand all
227 // partial word indexed at the end that might have been clipped. Therefore, 241 // partial word indexed at the end that might have been clipped. Therefore,
228 // terminate the string at the last space to ensure no words are clipped. 242 // terminate the string at the last space to ensure no words are clipped.
229 if (contents->size() == kMaxIndexChars) { 243 if (contents->size() == kMaxIndexChars) {
230 size_t last_space_index = contents->find_last_of(kWhitespaceUTF16); 244 size_t last_space_index = contents->find_last_of(kWhitespaceUTF16);
231 if (last_space_index == std::wstring::npos) 245 if (last_space_index == std::wstring::npos)
232 return; // don't index if we got a huge block of text with no spaces 246 return; // don't index if we got a huge block of text with no spaces
233 contents->resize(last_space_index); 247 contents->resize(last_space_index);
234 } 248 }
235 } 249 }
236 250
237 void ChromeRenderObserver::CaptureThumbnail() { 251 void ChromeRenderViewObserver::CaptureThumbnail() {
238 WebFrame* main_frame = render_view()->webview()->mainFrame(); 252 WebFrame* main_frame = render_view()->webview()->mainFrame();
239 if (!main_frame) 253 if (!main_frame)
240 return; 254 return;
241 255
242 // get the URL for this page 256 // get the URL for this page
243 GURL url(main_frame->url()); 257 GURL url(main_frame->url());
244 if (url.is_empty()) 258 if (url.is_empty())
245 return; 259 return;
246 260
247 if (render_view()->size().IsEmpty()) 261 if (render_view()->size().IsEmpty())
248 return; // Don't create an empty thumbnail! 262 return; // Don't create an empty thumbnail!
249 263
250 ThumbnailScore score; 264 ThumbnailScore score;
251 SkBitmap thumbnail; 265 SkBitmap thumbnail;
252 if (!CaptureFrameThumbnail(render_view()->webview(), kThumbnailWidth, 266 if (!CaptureFrameThumbnail(render_view()->webview(), kThumbnailWidth,
253 kThumbnailHeight, &thumbnail, &score)) 267 kThumbnailHeight, &thumbnail, &score))
254 return; 268 return;
255 269
256 // send the thumbnail message to the browser process 270 // send the thumbnail message to the browser process
257 Send(new ViewHostMsg_Thumbnail(routing_id(), url, score, thumbnail)); 271 Send(new ViewHostMsg_Thumbnail(routing_id(), url, score, thumbnail));
258 } 272 }
259 273
260 bool ChromeRenderObserver::CaptureFrameThumbnail(WebView* view, 274 bool ChromeRenderViewObserver::CaptureFrameThumbnail(WebView* view,
261 int w, 275 int w,
262 int h, 276 int h,
263 SkBitmap* thumbnail, 277 SkBitmap* thumbnail,
264 ThumbnailScore* score) { 278 ThumbnailScore* score) {
265 base::TimeTicks beginning_time = base::TimeTicks::Now(); 279 base::TimeTicks beginning_time = base::TimeTicks::Now();
266 280
267 skia::PlatformCanvas canvas; 281 skia::PlatformCanvas canvas;
268 282
269 // Paint |view| into |canvas|. 283 // Paint |view| into |canvas|.
270 if (!PaintViewIntoCanvas(view, canvas)) 284 if (!PaintViewIntoCanvas(view, canvas))
271 return false; 285 return false;
272 286
273 skia::BitmapPlatformDevice& device = 287 skia::BitmapPlatformDevice& device =
274 static_cast<skia::BitmapPlatformDevice&>(canvas.getTopPlatformDevice()); 288 static_cast<skia::BitmapPlatformDevice&>(canvas.getTopPlatformDevice());
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
319 downsampled_subset, skia::ImageOperations::RESIZE_LANCZOS3, w, h); 333 downsampled_subset, skia::ImageOperations::RESIZE_LANCZOS3, w, h);
320 334
321 score->boring_score = CalculateBoringScore(thumbnail); 335 score->boring_score = CalculateBoringScore(thumbnail);
322 336
323 HISTOGRAM_TIMES("Renderer4.Thumbnail", 337 HISTOGRAM_TIMES("Renderer4.Thumbnail",
324 base::TimeTicks::Now() - beginning_time); 338 base::TimeTicks::Now() - beginning_time);
325 339
326 return true; 340 return true;
327 } 341 }
328 342
329 bool ChromeRenderObserver::CaptureSnapshot(WebView* view, SkBitmap* snapshot) { 343 bool ChromeRenderViewObserver::CaptureSnapshot(WebView* view,
344 SkBitmap* snapshot) {
330 base::TimeTicks beginning_time = base::TimeTicks::Now(); 345 base::TimeTicks beginning_time = base::TimeTicks::Now();
331 346
332 skia::PlatformCanvas canvas; 347 skia::PlatformCanvas canvas;
333 if (!PaintViewIntoCanvas(view, canvas)) 348 if (!PaintViewIntoCanvas(view, canvas))
334 return false; 349 return false;
335 350
336 skia::BitmapPlatformDevice& device = 351 skia::BitmapPlatformDevice& device =
337 static_cast<skia::BitmapPlatformDevice&>(canvas.getTopPlatformDevice()); 352 static_cast<skia::BitmapPlatformDevice&>(canvas.getTopPlatformDevice());
338 353
339 const SkBitmap& bitmap = device.accessBitmap(false); 354 const SkBitmap& bitmap = device.accessBitmap(false);
340 if (!bitmap.copyTo(snapshot, SkBitmap::kARGB_8888_Config)) 355 if (!bitmap.copyTo(snapshot, SkBitmap::kARGB_8888_Config))
341 return false; 356 return false;
342 357
343 HISTOGRAM_TIMES("Renderer4.Snapshot", 358 HISTOGRAM_TIMES("Renderer4.Snapshot",
344 base::TimeTicks::Now() - beginning_time); 359 base::TimeTicks::Now() - beginning_time);
345 return true; 360 return true;
346 } 361 }
OLDNEW
« no previous file with comments | « chrome/renderer/chrome_render_view_observer.h ('k') | chrome/renderer/extensions/chrome_app_bindings.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698