Home | History | Annotate | Download | only in system_display
      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 
     14 namespace gfx {
     15 class Display;
     16 class Screen;
     17 }
     18 
     19 namespace extensions {
     20 
     21 namespace core_api {
     22 namespace system_display {
     23 struct DisplayProperties;
     24 struct DisplayUnitInfo;
     25 }
     26 }
     27 
     28 typedef std::vector<linked_ptr<core_api::system_display::DisplayUnitInfo> >
     29     DisplayInfo;
     30 
     31 class 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