12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 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) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/chromeos/dbus/display_power_service_provider.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/shell.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/bind.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "dbus/bus.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "dbus/message.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "third_party/cros_system_api/dbus/service_constants.h" 12c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "ui/display/chromeos/display_configurator.h" 13c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "ui/wm/core/user_activity_detector.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace chromeos { 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)DisplayPowerServiceProvider::DisplayPowerServiceProvider() 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : weak_ptr_factory_(this) { 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)DisplayPowerServiceProvider::~DisplayPowerServiceProvider() {} 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void DisplayPowerServiceProvider::Start( 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<dbus::ExportedObject> exported_object) { 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) exported_object->ExportMethod( 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kLibCrosServiceInterface, 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kSetDisplayPower, 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Bind(&DisplayPowerServiceProvider::SetDisplayPower, 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) weak_ptr_factory_.GetWeakPtr()), 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Bind(&DisplayPowerServiceProvider::OnExported, 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) weak_ptr_factory_.GetWeakPtr())); 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) exported_object->ExportMethod( 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kLibCrosServiceInterface, 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kSetDisplaySoftwareDimming, 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Bind(&DisplayPowerServiceProvider::SetDisplaySoftwareDimming, 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) weak_ptr_factory_.GetWeakPtr()), 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Bind(&DisplayPowerServiceProvider::OnExported, 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) weak_ptr_factory_.GetWeakPtr())); 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void DisplayPowerServiceProvider::OnExported(const std::string& interface_name, 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& method_name, 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool success) { 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!success) { 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOG(ERROR) << "Failed to export " << interface_name << "." 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) << method_name; 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void DisplayPowerServiceProvider::SetDisplayPower( 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dbus::MethodCall* method_call, 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dbus::ExportedObject::ResponseSender response_sender) { 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dbus::MessageReader reader(method_call); 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int int_state = 0; 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (reader.PopInt32(&int_state)) { 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Turning displays off when the device becomes idle or on just before 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // we suspend may trigger a mouse move, which would then be incorrectly 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // reported as user activity. Let the UserActivityDetector 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // know so that it can ignore such events. 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ash::Shell::GetInstance()->user_activity_detector()-> 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OnDisplayPowerChanging(); 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DisplayPowerState state = static_cast<DisplayPowerState>(int_state); 64c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ash::Shell::GetInstance()->display_configurator()->SetDisplayPower( 65c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch state, ui::DisplayConfigurator::kSetDisplayPowerNoFlags); 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOG(ERROR) << "Unable to parse " << kSetDisplayPower << " request"; 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) response_sender.Run(dbus::Response::FromMethodCall(method_call)); 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void DisplayPowerServiceProvider::SetDisplaySoftwareDimming( 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dbus::MethodCall* method_call, 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dbus::ExportedObject::ResponseSender response_sender) { 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dbus::MessageReader reader(method_call); 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool dimmed = false; 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (reader.PopBool(&dimmed)) { 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ash::Shell::GetInstance()->SetDimming(dimmed); 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOG(ERROR) << "Unable to parse " << kSetDisplaySoftwareDimming 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) << " request"; 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) response_sender.Run(dbus::Response::FromMethodCall(method_call)); 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace chromeos 88