OLD | NEW |
---|---|
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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 "content/browser/devtools/renderer_overrides_handler.h" | 5 #include "content/browser/devtools/renderer_overrides_handler.h" |
6 | 6 |
7 #include <map> | 7 #include <map> |
8 #include <string> | 8 #include <string> |
9 | 9 |
10 #include "base/barrier_closure.h" | 10 #include "base/barrier_closure.h" |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
60 namespace { | 60 namespace { |
61 | 61 |
62 static const char kPng[] = "png"; | 62 static const char kPng[] = "png"; |
63 static const char kJpeg[] = "jpeg"; | 63 static const char kJpeg[] = "jpeg"; |
64 static int kDefaultScreenshotQuality = 80; | 64 static int kDefaultScreenshotQuality = 80; |
65 static int kFrameRateThresholdMs = 100; | 65 static int kFrameRateThresholdMs = 100; |
66 static int kCaptureRetryLimit = 2; | 66 static int kCaptureRetryLimit = 2; |
67 | 67 |
68 } // namespace | 68 } // namespace |
69 | 69 |
70 RendererOverridesHandler::RendererOverridesHandler(DevToolsAgentHost* agent) | 70 RendererOverridesHandler::RendererOverridesHandler() |
71 : agent_(agent), | 71 : has_last_compositor_frame_metadata_(false), |
72 has_last_compositor_frame_metadata_(false), | |
73 capture_retry_count_(0), | 72 capture_retry_count_(0), |
74 weak_factory_(this) { | 73 weak_factory_(this) { |
75 RegisterCommandHandler( | 74 RegisterCommandHandler( |
76 devtools::DOM::setFileInputFiles::kName, | 75 devtools::DOM::setFileInputFiles::kName, |
77 base::Bind( | 76 base::Bind( |
78 &RendererOverridesHandler::GrantPermissionsForSetFileInputFiles, | 77 &RendererOverridesHandler::GrantPermissionsForSetFileInputFiles, |
79 base::Unretained(this))); | 78 base::Unretained(this))); |
80 RegisterCommandHandler( | 79 RegisterCommandHandler( |
81 devtools::Network::clearBrowserCache::kName, | 80 devtools::Network::clearBrowserCache::kName, |
82 base::Bind( | 81 base::Bind( |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
144 RegisterCommandHandler( | 143 RegisterCommandHandler( |
145 devtools::Input::emulateTouchFromMouseEvent::kName, | 144 devtools::Input::emulateTouchFromMouseEvent::kName, |
146 base::Bind( | 145 base::Bind( |
147 &RendererOverridesHandler::InputEmulateTouchFromMouseEvent, | 146 &RendererOverridesHandler::InputEmulateTouchFromMouseEvent, |
148 base::Unretained(this))); | 147 base::Unretained(this))); |
149 } | 148 } |
150 | 149 |
151 RendererOverridesHandler::~RendererOverridesHandler() {} | 150 RendererOverridesHandler::~RendererOverridesHandler() {} |
152 | 151 |
153 void RendererOverridesHandler::OnClientDetached() { | 152 void RendererOverridesHandler::OnClientDetached() { |
154 RenderViewHostImpl* host = GetRenderViewHostImpl(); | 153 if (screencast_command_ && host_) |
155 if (screencast_command_ && host) | 154 host_->SetTouchEventEmulationEnabled(false, false); |
156 host->SetTouchEventEmulationEnabled(false, false); | |
157 screencast_command_ = NULL; | 155 screencast_command_ = NULL; |
158 } | 156 } |
159 | 157 |
160 void RendererOverridesHandler::OnSwapCompositorFrame( | 158 void RendererOverridesHandler::OnSwapCompositorFrame( |
161 const cc::CompositorFrameMetadata& frame_metadata) { | 159 const cc::CompositorFrameMetadata& frame_metadata) { |
162 last_compositor_frame_metadata_ = frame_metadata; | 160 last_compositor_frame_metadata_ = frame_metadata; |
163 has_last_compositor_frame_metadata_ = true; | 161 has_last_compositor_frame_metadata_ = true; |
164 | 162 |
165 if (screencast_command_) | 163 if (screencast_command_) |
166 InnerSwapCompositorFrame(); | 164 InnerSwapCompositorFrame(); |
167 } | 165 } |
168 | 166 |
169 void RendererOverridesHandler::OnVisibilityChanged(bool visible) { | 167 void RendererOverridesHandler::OnVisibilityChanged(bool visible) { |
170 if (!screencast_command_) | 168 if (!screencast_command_) |
171 return; | 169 return; |
172 NotifyScreencastVisibility(visible); | 170 NotifyScreencastVisibility(visible); |
173 } | 171 } |
174 | 172 |
175 void RendererOverridesHandler::OnRenderViewHostChanged() { | 173 void RendererOverridesHandler::SetRenderViewHost( |
176 RenderViewHostImpl* host = GetRenderViewHostImpl(); | 174 RenderViewHostImpl* host) { |
175 host_ = host; | |
177 if (screencast_command_ && host) | 176 if (screencast_command_ && host) |
178 host->SetTouchEventEmulationEnabled(true, true); | 177 host->SetTouchEventEmulationEnabled(true, true); |
179 } | 178 } |
180 | 179 |
180 void RendererOverridesHandler::ClearRenderViewHost() { | |
181 host_ = NULL; | |
182 } | |
183 | |
181 bool RendererOverridesHandler::OnSetTouchEventEmulationEnabled() { | 184 bool RendererOverridesHandler::OnSetTouchEventEmulationEnabled() { |
182 return screencast_command_.get() != NULL; | 185 return screencast_command_.get() != NULL; |
183 } | 186 } |
184 | 187 |
185 void RendererOverridesHandler::InnerSwapCompositorFrame() { | 188 void RendererOverridesHandler::InnerSwapCompositorFrame() { |
186 if ((base::TimeTicks::Now() - last_frame_time_).InMilliseconds() < | 189 if ((base::TimeTicks::Now() - last_frame_time_).InMilliseconds() < |
187 kFrameRateThresholdMs) { | 190 kFrameRateThresholdMs) { |
188 return; | 191 return; |
189 } | 192 } |
190 | 193 |
191 RenderViewHost* host = GetRenderViewHostImpl(); | 194 if (!host_ || !host_->GetView()) |
192 if (!host->GetView()) | |
193 return; | 195 return; |
194 | 196 |
195 last_frame_time_ = base::TimeTicks::Now(); | 197 last_frame_time_ = base::TimeTicks::Now(); |
196 | 198 |
197 RenderWidgetHostViewBase* view = static_cast<RenderWidgetHostViewBase*>( | 199 RenderWidgetHostViewBase* view = static_cast<RenderWidgetHostViewBase*>( |
198 host->GetView()); | 200 host_->GetView()); |
199 // TODO(vkuzkokov): do not use previous frame metadata. | 201 // TODO(vkuzkokov): do not use previous frame metadata. |
200 cc::CompositorFrameMetadata& metadata = last_compositor_frame_metadata_; | 202 cc::CompositorFrameMetadata& metadata = last_compositor_frame_metadata_; |
201 | 203 |
202 float page_scale = metadata.page_scale_factor; | 204 float page_scale = metadata.page_scale_factor; |
203 gfx::SizeF viewport_size_dip = gfx::ScaleSize( | 205 gfx::SizeF viewport_size_dip = gfx::ScaleSize( |
204 metadata.scrollable_viewport_size, page_scale); | 206 metadata.scrollable_viewport_size, page_scale); |
205 | 207 |
206 float total_bar_height_dip = metadata.location_bar_content_translation.y() + | 208 float total_bar_height_dip = metadata.location_bar_content_translation.y() + |
207 metadata.overdraw_bottom_height; | 209 metadata.overdraw_bottom_height; |
208 gfx::SizeF screen_size_dip(viewport_size_dip.width(), | 210 gfx::SizeF screen_size_dip(viewport_size_dip.width(), |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
263 | 265 |
264 scoped_refptr<DevToolsProtocol::Response> | 266 scoped_refptr<DevToolsProtocol::Response> |
265 RendererOverridesHandler::GrantPermissionsForSetFileInputFiles( | 267 RendererOverridesHandler::GrantPermissionsForSetFileInputFiles( |
266 scoped_refptr<DevToolsProtocol::Command> command) { | 268 scoped_refptr<DevToolsProtocol::Command> command) { |
267 base::DictionaryValue* params = command->params(); | 269 base::DictionaryValue* params = command->params(); |
268 base::ListValue* file_list = NULL; | 270 base::ListValue* file_list = NULL; |
269 const char* param = | 271 const char* param = |
270 devtools::DOM::setFileInputFiles::kParamFiles; | 272 devtools::DOM::setFileInputFiles::kParamFiles; |
271 if (!params || !params->GetList(param, &file_list)) | 273 if (!params || !params->GetList(param, &file_list)) |
272 return command->InvalidParamResponse(param); | 274 return command->InvalidParamResponse(param); |
273 RenderViewHost* host = GetRenderViewHostImpl(); | 275 if (!host_) |
274 if (!host) | |
275 return NULL; | 276 return NULL; |
276 | 277 |
277 for (size_t i = 0; i < file_list->GetSize(); ++i) { | 278 for (size_t i = 0; i < file_list->GetSize(); ++i) { |
278 base::FilePath::StringType file; | 279 base::FilePath::StringType file; |
279 if (!file_list->GetString(i, &file)) | 280 if (!file_list->GetString(i, &file)) |
280 return command->InvalidParamResponse(param); | 281 return command->InvalidParamResponse(param); |
281 ChildProcessSecurityPolicyImpl::GetInstance()->GrantReadFile( | 282 ChildProcessSecurityPolicyImpl::GetInstance()->GrantReadFile( |
282 host->GetProcess()->GetID(), base::FilePath(file)); | 283 host_->GetProcess()->GetID(), base::FilePath(file)); |
283 } | 284 } |
284 return NULL; | 285 return NULL; |
285 } | 286 } |
286 | 287 |
287 | 288 |
288 // Network agent handlers ---------------------------------------------------- | 289 // Network agent handlers ---------------------------------------------------- |
289 | 290 |
290 scoped_refptr<DevToolsProtocol::Response> | 291 scoped_refptr<DevToolsProtocol::Response> |
291 RendererOverridesHandler::ClearBrowserCache( | 292 RendererOverridesHandler::ClearBrowserCache( |
292 scoped_refptr<DevToolsProtocol::Command> command) { | 293 scoped_refptr<DevToolsProtocol::Command> command) { |
293 GetContentClient()->browser()->ClearCache(GetRenderViewHostImpl()); | 294 GetContentClient()->browser()->ClearCache(host_); |
294 return command->SuccessResponse(NULL); | 295 return command->SuccessResponse(NULL); |
295 } | 296 } |
296 | 297 |
297 scoped_refptr<DevToolsProtocol::Response> | 298 scoped_refptr<DevToolsProtocol::Response> |
298 RendererOverridesHandler::ClearBrowserCookies( | 299 RendererOverridesHandler::ClearBrowserCookies( |
299 scoped_refptr<DevToolsProtocol::Command> command) { | 300 scoped_refptr<DevToolsProtocol::Command> command) { |
300 GetContentClient()->browser()->ClearCookies(GetRenderViewHostImpl()); | 301 GetContentClient()->browser()->ClearCookies(host_); |
301 return command->SuccessResponse(NULL); | 302 return command->SuccessResponse(NULL); |
302 } | 303 } |
303 | 304 |
304 | 305 |
305 // Page agent handlers ------------------------------------------------------- | 306 // Page agent handlers ------------------------------------------------------- |
306 | 307 |
307 scoped_refptr<DevToolsProtocol::Response> | 308 scoped_refptr<DevToolsProtocol::Response> |
308 RendererOverridesHandler::PageDisable( | 309 RendererOverridesHandler::PageDisable( |
309 scoped_refptr<DevToolsProtocol::Command> command) { | 310 scoped_refptr<DevToolsProtocol::Command> command) { |
310 RenderViewHostImpl* host = GetRenderViewHostImpl(); | 311 if (screencast_command_ && host_) |
311 if (screencast_command_ && host) | 312 host_->SetTouchEventEmulationEnabled(false, false); |
312 host->SetTouchEventEmulationEnabled(false, false); | |
313 screencast_command_ = NULL; | 313 screencast_command_ = NULL; |
314 return NULL; | 314 return NULL; |
315 } | 315 } |
316 | 316 |
317 scoped_refptr<DevToolsProtocol::Response> | 317 scoped_refptr<DevToolsProtocol::Response> |
318 RendererOverridesHandler::PageHandleJavaScriptDialog( | 318 RendererOverridesHandler::PageHandleJavaScriptDialog( |
319 scoped_refptr<DevToolsProtocol::Command> command) { | 319 scoped_refptr<DevToolsProtocol::Command> command) { |
320 base::DictionaryValue* params = command->params(); | 320 base::DictionaryValue* params = command->params(); |
321 const char* paramAccept = | 321 const char* paramAccept = |
322 devtools::Page::handleJavaScriptDialog::kParamAccept; | 322 devtools::Page::handleJavaScriptDialog::kParamAccept; |
323 bool accept = false; | 323 bool accept = false; |
324 if (!params || !params->GetBoolean(paramAccept, &accept)) | 324 if (!params || !params->GetBoolean(paramAccept, &accept)) |
325 return command->InvalidParamResponse(paramAccept); | 325 return command->InvalidParamResponse(paramAccept); |
326 base::string16 prompt_override; | 326 base::string16 prompt_override; |
327 base::string16* prompt_override_ptr = &prompt_override; | 327 base::string16* prompt_override_ptr = &prompt_override; |
328 if (!params || !params->GetString( | 328 if (!params || !params->GetString( |
329 devtools::Page::handleJavaScriptDialog::kParamPromptText, | 329 devtools::Page::handleJavaScriptDialog::kParamPromptText, |
330 prompt_override_ptr)) { | 330 prompt_override_ptr)) { |
331 prompt_override_ptr = NULL; | 331 prompt_override_ptr = NULL; |
332 } | 332 } |
333 | 333 |
334 WebContents* web_contents = agent_->GetWebContents(); | 334 if (!host_) |
335 return command->InternalErrorResponse("Could not connect to view"); | |
dgozman
2014/08/16 10:06:20
typo here and below: Could not connect to host
pfeldman
2014/08/16 11:12:40
I actually made them all consistent on purpose. It
| |
336 | |
337 WebContents* web_contents = WebContents::FromRenderViewHost(host_); | |
335 if (web_contents) { | 338 if (web_contents) { |
336 JavaScriptDialogManager* manager = | 339 JavaScriptDialogManager* manager = |
337 web_contents->GetDelegate()->GetJavaScriptDialogManager(); | 340 web_contents->GetDelegate()->GetJavaScriptDialogManager(); |
338 if (manager && manager->HandleJavaScriptDialog( | 341 if (manager && manager->HandleJavaScriptDialog( |
339 web_contents, accept, prompt_override_ptr)) { | 342 web_contents, accept, prompt_override_ptr)) { |
340 return command->SuccessResponse(new base::DictionaryValue()); | 343 return command->SuccessResponse(new base::DictionaryValue()); |
341 } | 344 } |
342 } | 345 } |
343 return command->InternalErrorResponse("No JavaScript dialog to handle"); | 346 return command->InternalErrorResponse("No JavaScript dialog to handle"); |
344 } | 347 } |
345 | 348 |
346 scoped_refptr<DevToolsProtocol::Response> | 349 scoped_refptr<DevToolsProtocol::Response> |
347 RendererOverridesHandler::PageNavigate( | 350 RendererOverridesHandler::PageNavigate( |
348 scoped_refptr<DevToolsProtocol::Command> command) { | 351 scoped_refptr<DevToolsProtocol::Command> command) { |
349 base::DictionaryValue* params = command->params(); | 352 base::DictionaryValue* params = command->params(); |
350 std::string url; | 353 std::string url; |
351 const char* param = devtools::Page::navigate::kParamUrl; | 354 const char* param = devtools::Page::navigate::kParamUrl; |
352 if (!params || !params->GetString(param, &url)) | 355 if (!params || !params->GetString(param, &url)) |
353 return command->InvalidParamResponse(param); | 356 return command->InvalidParamResponse(param); |
354 | 357 |
355 GURL gurl(url); | 358 GURL gurl(url); |
356 if (!gurl.is_valid()) | 359 if (!gurl.is_valid()) |
357 return command->InternalErrorResponse("Cannot navigate to invalid URL"); | 360 return command->InternalErrorResponse("Cannot navigate to invalid URL"); |
358 | 361 |
359 WebContents* web_contents = agent_->GetWebContents(); | 362 if (!host_) |
363 return command->InternalErrorResponse("Could not connect to view"); | |
364 | |
365 WebContents* web_contents = WebContents::FromRenderViewHost(host_); | |
360 if (web_contents) { | 366 if (web_contents) { |
361 web_contents->GetController() | 367 web_contents->GetController() |
362 .LoadURL(gurl, Referrer(), PAGE_TRANSITION_TYPED, std::string()); | 368 .LoadURL(gurl, Referrer(), PAGE_TRANSITION_TYPED, std::string()); |
363 // Fall through into the renderer. | 369 // Fall through into the renderer. |
364 return NULL; | 370 return NULL; |
365 } | 371 } |
366 | 372 |
367 return command->InternalErrorResponse("No WebContents to navigate"); | 373 return command->InternalErrorResponse("No WebContents to navigate"); |
368 } | 374 } |
369 | 375 |
370 scoped_refptr<DevToolsProtocol::Response> | 376 scoped_refptr<DevToolsProtocol::Response> |
371 RendererOverridesHandler::PageReload( | 377 RendererOverridesHandler::PageReload( |
372 scoped_refptr<DevToolsProtocol::Command> command) { | 378 scoped_refptr<DevToolsProtocol::Command> command) { |
373 WebContents* web_contents = agent_->GetWebContents(); | 379 if (!host_) |
380 return command->InternalErrorResponse("Could not connect to view"); | |
381 | |
382 WebContents* web_contents = WebContents::FromRenderViewHost(host_); | |
374 if (web_contents) { | 383 if (web_contents) { |
375 // Override only if it is crashed. | 384 // Override only if it is crashed. |
376 if (!web_contents->IsCrashed()) | 385 if (!web_contents->IsCrashed()) |
377 return NULL; | 386 return NULL; |
378 | 387 |
379 web_contents->GetController().Reload(false); | 388 web_contents->GetController().Reload(false); |
380 return command->SuccessResponse(NULL); | 389 return command->SuccessResponse(NULL); |
381 } | 390 } |
382 return command->InternalErrorResponse("No WebContents to reload"); | 391 return command->InternalErrorResponse("No WebContents to reload"); |
383 } | 392 } |
384 | 393 |
385 scoped_refptr<DevToolsProtocol::Response> | 394 scoped_refptr<DevToolsProtocol::Response> |
386 RendererOverridesHandler::PageGetNavigationHistory( | 395 RendererOverridesHandler::PageGetNavigationHistory( |
387 scoped_refptr<DevToolsProtocol::Command> command) { | 396 scoped_refptr<DevToolsProtocol::Command> command) { |
388 WebContents* web_contents = agent_->GetWebContents(); | 397 if (!host_) |
398 return command->InternalErrorResponse("Could not connect to view"); | |
399 WebContents* web_contents = WebContents::FromRenderViewHost(host_); | |
389 if (web_contents) { | 400 if (web_contents) { |
390 base::DictionaryValue* result = new base::DictionaryValue(); | 401 base::DictionaryValue* result = new base::DictionaryValue(); |
391 NavigationController& controller = web_contents->GetController(); | 402 NavigationController& controller = web_contents->GetController(); |
392 result->SetInteger( | 403 result->SetInteger( |
393 devtools::Page::getNavigationHistory::kResponseCurrentIndex, | 404 devtools::Page::getNavigationHistory::kResponseCurrentIndex, |
394 controller.GetCurrentEntryIndex()); | 405 controller.GetCurrentEntryIndex()); |
395 base::ListValue* entries = new base::ListValue(); | 406 base::ListValue* entries = new base::ListValue(); |
396 for (int i = 0; i != controller.GetEntryCount(); ++i) { | 407 for (int i = 0; i != controller.GetEntryCount(); ++i) { |
397 const NavigationEntry* entry = controller.GetEntryAtIndex(i); | 408 const NavigationEntry* entry = controller.GetEntryAtIndex(i); |
398 base::DictionaryValue* entry_value = new base::DictionaryValue(); | 409 base::DictionaryValue* entry_value = new base::DictionaryValue(); |
(...skipping 19 matching lines...) Expand all Loading... | |
418 scoped_refptr<DevToolsProtocol::Response> | 429 scoped_refptr<DevToolsProtocol::Response> |
419 RendererOverridesHandler::PageNavigateToHistoryEntry( | 430 RendererOverridesHandler::PageNavigateToHistoryEntry( |
420 scoped_refptr<DevToolsProtocol::Command> command) { | 431 scoped_refptr<DevToolsProtocol::Command> command) { |
421 base::DictionaryValue* params = command->params(); | 432 base::DictionaryValue* params = command->params(); |
422 const char* param = devtools::Page::navigateToHistoryEntry::kParamEntryId; | 433 const char* param = devtools::Page::navigateToHistoryEntry::kParamEntryId; |
423 int entry_id = 0; | 434 int entry_id = 0; |
424 if (!params || !params->GetInteger(param, &entry_id)) { | 435 if (!params || !params->GetInteger(param, &entry_id)) { |
425 return command->InvalidParamResponse(param); | 436 return command->InvalidParamResponse(param); |
426 } | 437 } |
427 | 438 |
428 WebContents* web_contents = agent_->GetWebContents(); | 439 if (!host_) |
440 return command->InternalErrorResponse("Could not connect to view"); | |
441 | |
442 WebContents* web_contents = WebContents::FromRenderViewHost(host_); | |
429 if (web_contents) { | 443 if (web_contents) { |
430 NavigationController& controller = web_contents->GetController(); | 444 NavigationController& controller = web_contents->GetController(); |
431 for (int i = 0; i != controller.GetEntryCount(); ++i) { | 445 for (int i = 0; i != controller.GetEntryCount(); ++i) { |
432 if (controller.GetEntryAtIndex(i)->GetUniqueID() == entry_id) { | 446 if (controller.GetEntryAtIndex(i)->GetUniqueID() == entry_id) { |
433 controller.GoToIndex(i); | 447 controller.GoToIndex(i); |
434 return command->SuccessResponse(new base::DictionaryValue()); | 448 return command->SuccessResponse(new base::DictionaryValue()); |
435 } | 449 } |
436 } | 450 } |
437 return command->InvalidParamResponse(param); | 451 return command->InvalidParamResponse(param); |
438 } | 452 } |
439 return command->InternalErrorResponse("No WebContents to navigate"); | 453 return command->InternalErrorResponse("No WebContents to navigate"); |
440 } | 454 } |
441 | 455 |
442 scoped_refptr<DevToolsProtocol::Response> | 456 scoped_refptr<DevToolsProtocol::Response> |
443 RendererOverridesHandler::PageCaptureScreenshot( | 457 RendererOverridesHandler::PageCaptureScreenshot( |
444 scoped_refptr<DevToolsProtocol::Command> command) { | 458 scoped_refptr<DevToolsProtocol::Command> command) { |
445 RenderViewHostImpl* host = GetRenderViewHostImpl(); | 459 if (!host_ || !host_->GetView()) |
446 if (!host->GetView()) | 460 return command->InternalErrorResponse("Could not connect to view"); |
447 return command->InternalErrorResponse("Unable to access the view"); | |
448 | 461 |
449 host->GetSnapshotFromBrowser( | 462 host_->GetSnapshotFromBrowser( |
450 base::Bind(&RendererOverridesHandler::ScreenshotCaptured, | 463 base::Bind(&RendererOverridesHandler::ScreenshotCaptured, |
451 weak_factory_.GetWeakPtr(), command)); | 464 weak_factory_.GetWeakPtr(), command)); |
452 return command->AsyncResponsePromise(); | 465 return command->AsyncResponsePromise(); |
453 } | 466 } |
454 | 467 |
455 void RendererOverridesHandler::ScreenshotCaptured( | 468 void RendererOverridesHandler::ScreenshotCaptured( |
456 scoped_refptr<DevToolsProtocol::Command> command, | 469 scoped_refptr<DevToolsProtocol::Command> command, |
457 const unsigned char* png_data, | 470 const unsigned char* png_data, |
458 size_t png_size) { | 471 size_t png_size) { |
459 if (!png_data || !png_size) { | 472 if (!png_data || !png_size) { |
(...skipping 23 matching lines...) Expand all Loading... | |
483 #else | 496 #else |
484 result->SetBoolean(devtools::kResult, false); | 497 result->SetBoolean(devtools::kResult, false); |
485 #endif // defined(OS_ANDROID) | 498 #endif // defined(OS_ANDROID) |
486 return command->SuccessResponse(result); | 499 return command->SuccessResponse(result); |
487 } | 500 } |
488 | 501 |
489 scoped_refptr<DevToolsProtocol::Response> | 502 scoped_refptr<DevToolsProtocol::Response> |
490 RendererOverridesHandler::PageStartScreencast( | 503 RendererOverridesHandler::PageStartScreencast( |
491 scoped_refptr<DevToolsProtocol::Command> command) { | 504 scoped_refptr<DevToolsProtocol::Command> command) { |
492 screencast_command_ = command; | 505 screencast_command_ = command; |
493 RenderViewHostImpl* host = GetRenderViewHostImpl(); | 506 if (!host_) |
494 host->SetTouchEventEmulationEnabled(true, true); | 507 return command->InternalErrorResponse("Could not connect to view"); |
495 bool visible = !host->is_hidden(); | 508 host_->SetTouchEventEmulationEnabled(true, true); |
509 bool visible = !host_->is_hidden(); | |
496 NotifyScreencastVisibility(visible); | 510 NotifyScreencastVisibility(visible); |
497 if (visible) { | 511 if (visible) { |
498 if (has_last_compositor_frame_metadata_) | 512 if (has_last_compositor_frame_metadata_) |
499 InnerSwapCompositorFrame(); | 513 InnerSwapCompositorFrame(); |
500 else | 514 else |
501 host->Send(new ViewMsg_ForceRedraw(host->GetRoutingID(), 0)); | 515 host_->Send(new ViewMsg_ForceRedraw(host_->GetRoutingID(), 0)); |
502 } | 516 } |
503 return command->SuccessResponse(NULL); | 517 return command->SuccessResponse(NULL); |
504 } | 518 } |
505 | 519 |
506 scoped_refptr<DevToolsProtocol::Response> | 520 scoped_refptr<DevToolsProtocol::Response> |
507 RendererOverridesHandler::PageStopScreencast( | 521 RendererOverridesHandler::PageStopScreencast( |
508 scoped_refptr<DevToolsProtocol::Command> command) { | 522 scoped_refptr<DevToolsProtocol::Command> command) { |
509 last_frame_time_ = base::TimeTicks(); | 523 last_frame_time_ = base::TimeTicks(); |
510 screencast_command_ = NULL; | 524 screencast_command_ = NULL; |
511 RenderViewHostImpl* host = GetRenderViewHostImpl(); | 525 if (host_) |
512 if (host) | 526 host_->SetTouchEventEmulationEnabled(false, false); |
513 host->SetTouchEventEmulationEnabled(false, false); | |
514 return command->SuccessResponse(NULL); | 527 return command->SuccessResponse(NULL); |
515 } | 528 } |
516 | 529 |
517 void RendererOverridesHandler::ScreencastFrameCaptured( | 530 void RendererOverridesHandler::ScreencastFrameCaptured( |
518 const std::string& format, | 531 const std::string& format, |
519 int quality, | 532 int quality, |
520 const cc::CompositorFrameMetadata& metadata, | 533 const cc::CompositorFrameMetadata& metadata, |
521 bool success, | 534 bool success, |
522 const SkBitmap& bitmap) { | 535 const SkBitmap& bitmap) { |
523 if (!success) { | 536 if (!success) { |
(...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
794 &security_origin)) { | 807 &security_origin)) { |
795 return command->InvalidParamResponse( | 808 return command->InvalidParamResponse( |
796 devtools::Page::queryUsageAndQuota::kParamSecurityOrigin); | 809 devtools::Page::queryUsageAndQuota::kParamSecurityOrigin); |
797 } | 810 } |
798 | 811 |
799 ResponseCallback callback = base::Bind( | 812 ResponseCallback callback = base::Bind( |
800 &RendererOverridesHandler::PageQueryUsageAndQuotaCompleted, | 813 &RendererOverridesHandler::PageQueryUsageAndQuotaCompleted, |
801 weak_factory_.GetWeakPtr(), | 814 weak_factory_.GetWeakPtr(), |
802 command); | 815 command); |
803 | 816 |
804 scoped_refptr<quota::QuotaManager> quota_manager = GetRenderViewHostImpl() | 817 if (!host_) |
805 ->GetProcess() | 818 return command->InternalErrorResponse("Could not connect to view"); |
806 ->GetStoragePartition() | 819 |
807 ->GetQuotaManager(); | 820 scoped_refptr<quota::QuotaManager> quota_manager = |
821 host_->GetProcess()->GetStoragePartition()->GetQuotaManager(); | |
808 | 822 |
809 BrowserThread::PostTask( | 823 BrowserThread::PostTask( |
810 BrowserThread::IO, FROM_HERE, | 824 BrowserThread::IO, FROM_HERE, |
811 base::Bind( | 825 base::Bind( |
812 &QueryUsageAndQuotaOnIOThread, | 826 &QueryUsageAndQuotaOnIOThread, |
813 quota_manager, | 827 quota_manager, |
814 GURL(security_origin), | 828 GURL(security_origin), |
815 callback)); | 829 callback)); |
816 | 830 |
817 return command->AsyncResponsePromise(); | 831 return command->AsyncResponsePromise(); |
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
947 event->button = WebMouseEvent::ButtonMiddle; | 961 event->button = WebMouseEvent::ButtonMiddle; |
948 event->modifiers |= WebInputEvent::MiddleButtonDown; | 962 event->modifiers |= WebInputEvent::MiddleButtonDown; |
949 } else if (button == "right") { | 963 } else if (button == "right") { |
950 event->button = WebMouseEvent::ButtonRight; | 964 event->button = WebMouseEvent::ButtonRight; |
951 event->modifiers |= WebInputEvent::RightButtonDown; | 965 event->modifiers |= WebInputEvent::RightButtonDown; |
952 } else { | 966 } else { |
953 return command->InvalidParamResponse( | 967 return command->InvalidParamResponse( |
954 devtools::Input::emulateTouchFromMouseEvent::kParamButton); | 968 devtools::Input::emulateTouchFromMouseEvent::kParamButton); |
955 } | 969 } |
956 | 970 |
957 RenderViewHost* host = GetRenderViewHostImpl(); | 971 if (!host_) |
972 return command->InternalErrorResponse("Could not connect to view"); | |
973 | |
958 if (event->type == WebInputEvent::MouseWheel) | 974 if (event->type == WebInputEvent::MouseWheel) |
959 host->ForwardWheelEvent(wheel_event); | 975 host_->ForwardWheelEvent(wheel_event); |
960 else | 976 else |
961 host->ForwardMouseEvent(mouse_event); | 977 host_->ForwardMouseEvent(mouse_event); |
962 return command->SuccessResponse(NULL); | 978 return command->SuccessResponse(NULL); |
963 } | 979 } |
964 | 980 |
965 RenderViewHostImpl* RendererOverridesHandler::GetRenderViewHostImpl() { | |
966 return static_cast<RenderViewHostImpl*>( | |
967 agent_->GetWebContents()->GetRenderViewHost()); | |
968 } | |
969 | |
970 } // namespace content | 981 } // namespace content |
OLD | NEW |