| Index: chrome/browser/extensions/display_info_provider_chromeos.cc | 
| diff --git a/chrome/browser/extensions/display_info_provider_chromeos.cc b/chrome/browser/extensions/display_info_provider_chromeos.cc | 
| index 486c0d73f25ea38afbc0751a852bac303489df96..3238b428668a6f70011de89a9151c71d8934101b 100644 | 
| --- a/chrome/browser/extensions/display_info_provider_chromeos.cc | 
| +++ b/chrome/browser/extensions/display_info_provider_chromeos.cc | 
| @@ -12,6 +12,7 @@ | 
| #include "ash/shell.h" | 
| #include "base/strings/string_number_conversions.h" | 
| #include "chrome/browser/chromeos/display/display_preferences.h" | 
| +#include "chrome/browser/chromeos/display/overscan_calibrator.h" | 
| #include "extensions/common/api/system_display.h" | 
| #include "ui/display/display.h" | 
| #include "ui/display/manager/display_layout.h" | 
| @@ -30,6 +31,15 @@ namespace { | 
| // Maximum allowed bounds origin absolute value. | 
| const int kMaxBoundsOrigin = 200 * 1000; | 
|  | 
| +// Gets the display with the provided string id. | 
| +display::Display GetDisplay(const std::string& display_id_str) { | 
| +  int64_t display_id; | 
| +  if (!base::StringToInt64(display_id_str, &display_id)) | 
| +    return display::Display(); | 
| +  return ash::Shell::GetInstance()->display_manager()->GetDisplayForId( | 
| +      display_id); | 
| +} | 
| + | 
| // Checks if the given integer value is valid display rotation in degrees. | 
| bool IsValidRotationValue(int rotation) { | 
| return rotation == 0 || rotation == 90 || rotation == 180 || rotation == 270; | 
| @@ -195,10 +205,8 @@ bool ValidateParamsForDisplay(const DisplayProperties& info, | 
| // If mirroring source id is set, a display with the given id should exist, | 
| // and if should not be the same as the target display's id. | 
| if (info.mirroring_source_id && !info.mirroring_source_id->empty()) { | 
| -    int64_t mirroring_id; | 
| -    if (!base::StringToInt64(*info.mirroring_source_id, &mirroring_id) || | 
| -        display_manager->GetDisplayForId(mirroring_id).id() == | 
| -            display::Display::kInvalidDisplayID) { | 
| +    int64_t mirroring_id = GetDisplay(*info.mirroring_source_id).id(); | 
| +    if (mirroring_id == display::Display::kInvalidDisplayID) { | 
| *error = "Display " + *info.mirroring_source_id + " not found."; | 
| return false; | 
| } | 
| @@ -311,17 +319,6 @@ bool ValidateParamsForDisplay(const DisplayProperties& info, | 
| return true; | 
| } | 
|  | 
| -// Gets the display with the provided string id. | 
| -display::Display GetTargetDisplay(const std::string& display_id_str, | 
| -                                  ash::DisplayManager* manager) { | 
| -  int64_t display_id; | 
| -  if (!base::StringToInt64(display_id_str, &display_id)) { | 
| -    // This should return invalid display. | 
| -    return display::Display(); | 
| -  } | 
| -  return manager->GetDisplayForId(display_id); | 
| -} | 
| - | 
| extensions::api::system_display::DisplayMode GetDisplayMode( | 
| ash::DisplayManager* display_manager, | 
| const ash::DisplayInfo& display_info, | 
| @@ -359,8 +356,7 @@ bool DisplayInfoProviderChromeOS::SetInfo(const std::string& display_id_str, | 
| ash::DisplayConfigurationController* display_configuration_controller = | 
| ash::Shell::GetInstance()->display_configuration_controller(); | 
|  | 
| -  const display::Display target = | 
| -      GetTargetDisplay(display_id_str, display_manager); | 
| +  const display::Display target = GetDisplay(display_id_str); | 
|  | 
| if (target.id() == display::Display::kInvalidDisplayID) { | 
| *error = "Display not found."; | 
| @@ -482,6 +478,62 @@ DisplayUnitInfoList DisplayInfoProviderChromeOS::GetAllDisplaysInfo() { | 
| return all_displays; | 
| } | 
|  | 
| +bool DisplayInfoProviderChromeOS::OverscanCalibrationStart( | 
| +    const std::string& id) { | 
| +  VLOG(1) << "OverscanCalibrationStart: " << id; | 
| +  const display::Display display = GetDisplay(id); | 
| +  if (display.id() == display::Display::kInvalidDisplayID) | 
| +    return false; | 
| +  auto insets = | 
| +      ash::Shell::GetInstance()->window_tree_host_manager()->GetOverscanInsets( | 
| +          display.id()); | 
| +  overscan_calibrators_[id].reset( | 
| +      new chromeos::OverscanCalibrator(display, insets)); | 
| +  return true; | 
| +} | 
| + | 
| +bool DisplayInfoProviderChromeOS::OverscanCalibrationAdjust( | 
| +    const std::string& id, | 
| +    const api::system_display::Insets& delta) { | 
| +  VLOG(1) << "OverscanCalibrationAdjust: " << id; | 
| +  chromeos::OverscanCalibrator* calibrator = GetCalibrator(id); | 
| +  if (!calibrator) | 
| +    return false; | 
| +  gfx::Insets insets = calibrator->insets(); | 
| +  insets += gfx::Insets(delta.top, delta.left, delta.bottom, delta.right); | 
| +  calibrator->UpdateInsets(insets); | 
| +  return true; | 
| +} | 
| + | 
| +bool DisplayInfoProviderChromeOS::OverscanCalibrationReset( | 
| +    const std::string& id) { | 
| +  VLOG(1) << "OverscanCalibrationReset: " << id; | 
| +  chromeos::OverscanCalibrator* calibrator = GetCalibrator(id); | 
| +  if (!calibrator) | 
| +    return false; | 
| +  calibrator->Reset(); | 
| +  return true; | 
| +} | 
| + | 
| +bool DisplayInfoProviderChromeOS::OverscanCalibrationComplete( | 
| +    const std::string& id) { | 
| +  VLOG(1) << "OverscanCalibrationComplete: " << id; | 
| +  chromeos::OverscanCalibrator* calibrator = GetCalibrator(id); | 
| +  if (!calibrator) | 
| +    return false; | 
| +  calibrator->Commit(); | 
| +  overscan_calibrators_[id].reset(); | 
| +  return true; | 
| +} | 
| + | 
| +chromeos::OverscanCalibrator* DisplayInfoProviderChromeOS::GetCalibrator( | 
| +    const std::string& id) { | 
| +  auto iter = overscan_calibrators_.find(id); | 
| +  if (iter == overscan_calibrators_.end()) | 
| +    return nullptr; | 
| +  return iter->second.get(); | 
| +} | 
| + | 
| // static | 
| DisplayInfoProvider* DisplayInfoProvider::Create() { | 
| return new DisplayInfoProviderChromeOS(); | 
|  |