1// Copyright 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef EXTENSIONS_BROWSER_API_SYSTEM_DISPLAY_DISPLAY_INFO_PROVIDER_H_ 6#define EXTENSIONS_BROWSER_API_SYSTEM_DISPLAY_DISPLAY_INFO_PROVIDER_H_ 7 8#include <string> 9#include <vector> 10 11#include "base/macros.h" 12#include "base/memory/linked_ptr.h" 13 14namespace gfx { 15class Display; 16class Screen; 17} 18 19namespace extensions { 20 21namespace core_api { 22namespace system_display { 23struct DisplayProperties; 24struct DisplayUnitInfo; 25} 26} 27 28typedef std::vector<linked_ptr<core_api::system_display::DisplayUnitInfo> > 29 DisplayInfo; 30 31class DisplayInfoProvider { 32 public: 33 virtual ~DisplayInfoProvider(); 34 35 // Returns a pointer to DisplayInfoProvider or NULL if Create() 36 // or InitializeForTesting() or not called yet. 37 static DisplayInfoProvider* Get(); 38 39 // This is for tests that run in its own process (e.g. browser_tests). 40 // Using this in other tests (e.g. unit_tests) will result in DCHECK failure. 41 static void InitializeForTesting(DisplayInfoProvider* display_info_provider); 42 43 // Updates the display with |display_id| according to |info|. Returns whether 44 // the display was successfully updated. On failure, no display parameters 45 // should be changed, and |error| should be set to the error string. 46 virtual bool SetInfo(const std::string& display_id, 47 const core_api::system_display::DisplayProperties& info, 48 std::string* error) = 0; 49 50 // Get the screen that is always active, which will be used for monitoring 51 // display changes events. 52 virtual gfx::Screen* GetActiveScreen() = 0; 53 54 DisplayInfo GetAllDisplaysInfo(); 55 56 protected: 57 DisplayInfoProvider(); 58 59 private: 60 static DisplayInfoProvider* Create(); 61 62 // Update the content of the |unit| obtained for |display| using 63 // platform specific method. 64 virtual void UpdateDisplayUnitInfoForPlatform( 65 const gfx::Display& display, 66 core_api::system_display::DisplayUnitInfo* unit) = 0; 67 68 DISALLOW_COPY_AND_ASSIGN(DisplayInfoProvider); 69}; 70 71} // namespace extensions 72 73#endif // EXTENSIONS_BROWSER_API_SYSTEM_DISPLAY_DISPLAY_INFO_PROVIDER_H_ 74