1ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch// Copyright 2013 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "chrome/browser/extensions/api/system_display/system_display_api.h"
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
77d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
87d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chrome/common/extensions/manifest_handlers/kiosk_enabled_info.h"
97d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace extensions {
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
12ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochusing api::system_display::DisplayUnitInfo;
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
14ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochnamespace SetDisplayProperties = api::system_display::SetDisplayProperties;
157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
16ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochbool SystemDisplayGetInfoFunction::RunImpl() {
17bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch  DisplayInfoProvider::Get()->RequestInfo(
187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      base::Bind(
19ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch          &SystemDisplayGetInfoFunction::OnGetDisplayInfoCompleted,
207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)          this));
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return true;
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
24ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochvoid SystemDisplayGetInfoFunction::OnGetDisplayInfoCompleted(
257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    bool success) {
267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (success) {
27ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    results_ = api::system_display::GetInfo::Results::Create(
28bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch                   DisplayInfoProvider::Get()->display_info());
297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  } else {
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    SetError("Error occurred when querying display information.");
317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  }
327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  SendResponse(success);
337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
35ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochbool SystemDisplaySetDisplayPropertiesFunction::RunImpl() {
367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#if !defined(OS_CHROMEOS)
377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  SetError("Function available only on ChromeOS.");
387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  return false;
397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#else
407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (!KioskEnabledInfo::IsKioskEnabled(GetExtension())) {
417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    SetError("The extension needs to be kiosk enabled to use the function.");
427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    return false;
437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  }
447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  scoped_ptr<SetDisplayProperties::Params> params(
467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      SetDisplayProperties::Params::Create(*args_));
47bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch  DisplayInfoProvider::Get()->SetInfo(params->id, params->info,
487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      base::Bind(
49ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch          &SystemDisplaySetDisplayPropertiesFunction::OnPropertiesSet,
507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)          this));
517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  return true;
527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#endif
537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
55ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochvoid SystemDisplaySetDisplayPropertiesFunction::OnPropertiesSet(
567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    bool success, const std::string& error) {
577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (!success)
587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    SetError(error);
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SendResponse(success);
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace extensions
63