| Index: content/browser/devtools/protocol/emulation_handler.cc
|
| diff --git a/content/browser/devtools/protocol/emulation_handler.cc b/content/browser/devtools/protocol/emulation_handler.cc
|
| index f5945d713214f6604c2bf9640739f85847f7d62b..6b124e37131dc66c0de5ec67f551117388bf4e4f 100644
|
| --- a/content/browser/devtools/protocol/emulation_handler.cc
|
| +++ b/content/browser/devtools/protocol/emulation_handler.cc
|
| @@ -23,6 +23,19 @@ using Response = DevToolsProtocolClient::Response;
|
|
|
| namespace {
|
|
|
| +blink::WebScreenOrientationType WebScreenOrientationTypeFromString(
|
| + const std::string& type) {
|
| + if (type == screen_orientation::kTypePortraitPrimary)
|
| + return blink::WebScreenOrientationPortraitPrimary;
|
| + if (type == screen_orientation::kTypePortraitSecondary)
|
| + return blink::WebScreenOrientationPortraitSecondary;
|
| + if (type == screen_orientation::kTypeLandscapePrimary)
|
| + return blink::WebScreenOrientationLandscapePrimary;
|
| + if (type == screen_orientation::kTypeLandscapeSecondary)
|
| + return blink::WebScreenOrientationLandscapeSecondary;
|
| + return blink::WebScreenOrientationUndefined;
|
| +}
|
| +
|
| ui::GestureProviderConfigType TouchEmulationConfigurationToType(
|
| const std::string& protocol_value) {
|
| ui::GestureProviderConfigType result =
|
| @@ -132,9 +145,11 @@ Response EmulationHandler::SetDeviceMetricsOverride(
|
| const int* screen_width,
|
| const int* screen_height,
|
| const int* position_x,
|
| - const int* position_y) {
|
| + const int* position_y,
|
| + const scoped_ptr<base::DictionaryValue>& screen_orientation) {
|
| const static int max_size = 10000000;
|
| const static double max_scale = 10;
|
| + const static int max_orientation_angle = 360;
|
|
|
| if (!host_)
|
| return Response::InternalError("Could not connect to view");
|
| @@ -168,6 +183,30 @@ Response EmulationHandler::SetDeviceMetricsOverride(
|
| base::DoubleToString(max_scale));
|
| }
|
|
|
| + blink::WebScreenOrientationType orientationType =
|
| + blink::WebScreenOrientationUndefined;
|
| + int orientationAngle = 0;
|
| + if (screen_orientation) {
|
| + std::string orientationTypeString;
|
| + if (!screen_orientation->GetString("type", &orientationTypeString)) {
|
| + return Response::InvalidParams(
|
| + "Screen orientation type must be a string");
|
| + }
|
| + orientationType = WebScreenOrientationTypeFromString(orientationTypeString);
|
| + if (orientationType == blink::WebScreenOrientationUndefined)
|
| + return Response::InvalidParams("Invalid screen orientation type value");
|
| +
|
| + if (!screen_orientation->GetInteger("angle", &orientationAngle)) {
|
| + return Response::InvalidParams(
|
| + "Screen orientation angle must be a number");
|
| + }
|
| + if (orientationAngle < 0 || orientationAngle >= max_orientation_angle) {
|
| + return Response::InvalidParams(
|
| + "Screen orientation angle must be non-negative, less than " +
|
| + base::IntToString(max_orientation_angle));
|
| + }
|
| + }
|
| +
|
| blink::WebDeviceEmulationParams params;
|
| params.screenPosition = mobile ? blink::WebDeviceEmulationParams::Mobile :
|
| blink::WebDeviceEmulationParams::Desktop;
|
| @@ -182,6 +221,8 @@ Response EmulationHandler::SetDeviceMetricsOverride(
|
| params.offset = blink::WebFloatPoint(
|
| optional_offset_x ? *optional_offset_x : 0.f,
|
| optional_offset_y ? *optional_offset_y : 0.f);
|
| + params.screenOrientationType = orientationType;
|
| + params.screenOrientationAngle = orientationAngle;
|
|
|
| if (device_emulation_enabled_ && params == device_emulation_params_)
|
| return Response::OK();
|
|
|