| 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 425 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 436 gfx::ScaleSize(view_bounds.size(), scale)); | 436 gfx::ScaleSize(view_bounds.size(), scale)); |
| 437 | 437 |
| 438 // Grab screen pixels if available for current platform. | 438 // Grab screen pixels if available for current platform. |
| 439 // TODO(pfeldman): support format, scale and quality in ui::GrabViewSnapshot. | 439 // TODO(pfeldman): support format, scale and quality in ui::GrabViewSnapshot. |
| 440 std::vector<unsigned char> png; | 440 std::vector<unsigned char> png; |
| 441 bool is_unscaled_png = scale == 1 && format == kPng; | 441 bool is_unscaled_png = scale == 1 && format == kPng; |
| 442 if (is_unscaled_png && ui::GrabViewSnapshot(host->GetView()->GetNativeView(), | 442 if (is_unscaled_png && ui::GrabViewSnapshot(host->GetView()->GetNativeView(), |
| 443 &png, | 443 &png, |
| 444 gfx::Rect(snapshot_size))) { | 444 gfx::Rect(snapshot_size))) { |
| 445 std::string base64_data; | 445 std::string base64_data; |
| 446 bool success = base::Base64Encode( | 446 base::Base64Encode( |
| 447 base::StringPiece(reinterpret_cast<char*>(&*png.begin()), png.size()), | 447 base::StringPiece(reinterpret_cast<char*>(&*png.begin()), png.size()), |
| 448 &base64_data); | 448 &base64_data); |
| 449 if (success) { | 449 base::DictionaryValue* result = new base::DictionaryValue(); |
| 450 base::DictionaryValue* result = new base::DictionaryValue(); | 450 result->SetString( |
| 451 result->SetString( | 451 devtools::Page::captureScreenshot::kResponseData, base64_data); |
| 452 devtools::Page::captureScreenshot::kResponseData, base64_data); | 452 return command->SuccessResponse(result); |
| 453 return command->SuccessResponse(result); | |
| 454 } | |
| 455 return command->InternalErrorResponse("Unable to base64encode screenshot"); | |
| 456 } | 453 } |
| 457 | 454 |
| 458 // Fallback to copying from compositing surface. | 455 // Fallback to copying from compositing surface. |
| 459 RenderWidgetHostViewPort* view_port = | 456 RenderWidgetHostViewPort* view_port = |
| 460 RenderWidgetHostViewPort::FromRWHV(host->GetView()); | 457 RenderWidgetHostViewPort::FromRWHV(host->GetView()); |
| 461 | 458 |
| 462 view_port->CopyFromCompositingSurface( | 459 view_port->CopyFromCompositingSurface( |
| 463 view_bounds, snapshot_size, | 460 view_bounds, snapshot_size, |
| 464 base::Bind(&RendererOverridesHandler::ScreenshotCaptured, | 461 base::Bind(&RendererOverridesHandler::ScreenshotCaptured, |
| 465 weak_factory_.GetWeakPtr(), command, format, quality, | 462 weak_factory_.GetWeakPtr(), command, format, quality, |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 546 | 543 |
| 547 if (!encoded) { | 544 if (!encoded) { |
| 548 if (command) { | 545 if (command) { |
| 549 SendAsyncResponse( | 546 SendAsyncResponse( |
| 550 command->InternalErrorResponse("Unable to encode screenshot")); | 547 command->InternalErrorResponse("Unable to encode screenshot")); |
| 551 } | 548 } |
| 552 return; | 549 return; |
| 553 } | 550 } |
| 554 | 551 |
| 555 std::string base_64_data; | 552 std::string base_64_data; |
| 556 if (!base::Base64Encode(base::StringPiece( | 553 base::Base64Encode( |
| 557 reinterpret_cast<char*>(&data[0]), | 554 base::StringPiece(reinterpret_cast<char*>(&data[0]), data.size()), |
| 558 data.size()), | 555 &base_64_data); |
| 559 &base_64_data)) { | |
| 560 if (command) { | |
| 561 SendAsyncResponse( | |
| 562 command->InternalErrorResponse("Unable to base64 encode")); | |
| 563 } | |
| 564 return; | |
| 565 } | |
| 566 | 556 |
| 567 base::DictionaryValue* response = new base::DictionaryValue(); | 557 base::DictionaryValue* response = new base::DictionaryValue(); |
| 568 response->SetString(devtools::Page::screencastFrame::kParamData, | 558 response->SetString(devtools::Page::screencastFrame::kParamData, |
| 569 base_64_data); | 559 base_64_data); |
| 570 | 560 |
| 571 // Consider metadata empty in case it has no device scale factor. | 561 // Consider metadata empty in case it has no device scale factor. |
| 572 if (metadata.device_scale_factor != 0) { | 562 if (metadata.device_scale_factor != 0) { |
| 573 base::DictionaryValue* response_metadata = new base::DictionaryValue(); | 563 base::DictionaryValue* response_metadata = new base::DictionaryValue(); |
| 574 | 564 |
| 575 response_metadata->SetDouble( | 565 response_metadata->SetDouble( |
| (...skipping 404 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 980 return NULL; | 970 return NULL; |
| 981 } | 971 } |
| 982 event.data.pinchUpdate.scale = static_cast<float>(scale); | 972 event.data.pinchUpdate.scale = static_cast<float>(scale); |
| 983 } | 973 } |
| 984 | 974 |
| 985 host->ForwardGestureEvent(event); | 975 host->ForwardGestureEvent(event); |
| 986 return command->SuccessResponse(NULL); | 976 return command->SuccessResponse(NULL); |
| 987 } | 977 } |
| 988 | 978 |
| 989 } // namespace content | 979 } // namespace content |
| OLD | NEW |