Home | History | Annotate | Download | only in window_sizer
      1 // Copyright (c) 2012 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 CHROME_BROWSER_UI_WINDOW_SIZER_WINDOW_SIZER_COMMON_UNITTEST_H_
      6 #define CHROME_BROWSER_UI_WINDOW_SIZER_WINDOW_SIZER_COMMON_UNITTEST_H_
      7 
      8 #include <vector>
      9 
     10 #include "base/logging.h"
     11 #include "chrome/browser/ui/window_sizer/window_sizer.h"
     12 #include "chrome/test/base/test_browser_window.h"
     13 #include "ui/gfx/rect.h"
     14 
     15 // Some standard primary monitor sizes (no task bar).
     16 static const gfx::Rect p1024x768(0, 0, 1024, 768);
     17 static const gfx::Rect p1280x1024(0, 0, 1280, 1024);
     18 static const gfx::Rect p1600x1200(0, 0, 1600, 1200);
     19 static const gfx::Rect p1680x1050(0, 0, 1680, 1050);
     20 static const gfx::Rect p1920x1200(0, 0, 1920, 1200);
     21 
     22 // Represents a 1024x768 monitor that is the secondary monitor, arranged to
     23 // the immediate left of the primary 1024x768 monitor.
     24 static const gfx::Rect left_s1024x768(-1024, 0, 1024, 768);
     25 
     26 // Represents a 1024x768 monitor that is the secondary monitor, arranged to
     27 // the immediate right of the primary 1024x768 monitor.
     28 static const gfx::Rect right_s1024x768(1024, 0, 1024, 768);
     29 
     30 // Represents a 1024x768 monitor that is the secondary monitor, arranged to
     31 // the immediate top of the primary 1024x768 monitor.
     32 static const gfx::Rect top_s1024x768(0, -768, 1024, 768);
     33 
     34 // Represents a 1024x768 monitor that is the secondary monitor, arranged to
     35 // the immediate bottom of the primary 1024x768 monitor.
     36 static const gfx::Rect bottom_s1024x768(0, 768, 1024, 768);
     37 
     38 // Represents a 1600x1200 monitor that is the secondary monitor, arranged to
     39 // the immediate bottom of the primary 1600x1200 monitor.
     40 static const gfx::Rect bottom_s1600x1200(0, 1200, 1600, 1200);
     41 
     42 // The work area for 1024x768 monitors with different taskbar orientations.
     43 static const gfx::Rect taskbar_bottom_work_area(0, 0, 1024, 734);
     44 static const gfx::Rect taskbar_top_work_area(0, 34, 1024, 734);
     45 static const gfx::Rect taskbar_left_work_area(107, 0, 917, 768);
     46 static const gfx::Rect taskbar_right_work_area(0, 0, 917, 768);
     47 
     48 extern int kWindowTilePixels;
     49 
     50 // Testing implementation of WindowSizer::StateProvider that we use to fake
     51 // persistent storage and existing windows.
     52 class TestStateProvider : public WindowSizer::StateProvider {
     53  public:
     54   TestStateProvider();
     55   virtual ~TestStateProvider() {}
     56 
     57   void SetPersistentState(const gfx::Rect& bounds,
     58                           const gfx::Rect& work_area,
     59                           ui::WindowShowState show_state,
     60                           bool has_persistent_data);
     61   void SetLastActiveState(const gfx::Rect& bounds,
     62                           ui::WindowShowState show_state,
     63                           bool has_last_active_data);
     64 
     65   // Overridden from WindowSizer::StateProvider:
     66   virtual bool GetPersistentState(
     67       gfx::Rect* bounds,
     68       gfx::Rect* saved_work_area,
     69       ui::WindowShowState* show_state) const OVERRIDE;
     70   virtual bool GetLastActiveWindowState(
     71       gfx::Rect* bounds,
     72       ui::WindowShowState* show_state) const OVERRIDE;
     73 
     74  private:
     75   gfx::Rect persistent_bounds_;
     76   gfx::Rect persistent_work_area_;
     77   bool has_persistent_data_;
     78   ui::WindowShowState persistent_show_state_;
     79 
     80   gfx::Rect last_active_bounds_;
     81   bool has_last_active_data_;
     82   ui::WindowShowState last_active_show_state_;
     83 
     84   DISALLOW_COPY_AND_ASSIGN(TestStateProvider);
     85 };
     86 
     87 // Several convenience functions which allow to set up a state for
     88 // window sizer test operations with a single call.
     89 
     90 enum Source { DEFAULT, LAST_ACTIVE, PERSISTED, BOTH };
     91 
     92 // Set up the window bounds, monitor bounds, show states and more to get the
     93 // resulting |out_bounds| and |out_show_state| from the WindowSizer.
     94 // |source| specifies which type of data gets set for the test: Either the
     95 // last active window, the persisted value which was stored earlier, both or
     96 // none. For all these states the |bounds| and |work_area| get used, for the
     97 // show states either |show_state_persisted| or |show_state_last| will be used.
     98 void GetWindowBoundsAndShowState(const gfx::Rect& monitor1_bounds,
     99                                  const gfx::Rect& monitor1_work_area,
    100                                  const gfx::Rect& monitor2_bounds,
    101                                  const gfx::Rect& bounds,
    102                                  const gfx::Rect& work_area,
    103                                  ui::WindowShowState show_state_persisted,
    104                                  ui::WindowShowState show_state_last,
    105                                  Source source,
    106                                  const Browser* browser,
    107                                  const gfx::Rect& passed_in,
    108                                  gfx::Rect* out_bounds,
    109                                  ui::WindowShowState* out_show_state);
    110 
    111 // Set up the window bounds, monitor bounds, and work area to get the
    112 // resulting |out_bounds| from the WindowSizer.
    113 // |source| specifies which type of data gets set for the test: Either the
    114 // last active window, the persisted value which was stored earlier, both or
    115 // none. For all these states the |bounds| and |work_area| get used, for the
    116 // show states either |show_state_persisted| or |show_state_last| will be used.
    117 void GetWindowBounds(const gfx::Rect& monitor1_bounds,
    118                      const gfx::Rect& monitor1_work_area,
    119                      const gfx::Rect& monitor2_bounds,
    120                      const gfx::Rect& bounds,
    121                      const gfx::Rect& work_area,
    122                      Source source,
    123                      const Browser* browser,
    124                      const gfx::Rect& passed_in,
    125                      gfx::Rect* out_bounds);
    126 
    127 // Set up the various show states and get the resulting show state from
    128 // the WindowSizer.
    129 // The |display_config| is the primary display configuration used.
    130 ui::WindowShowState GetWindowShowState(
    131     ui::WindowShowState show_state_persisted,
    132     ui::WindowShowState show_state_last,
    133     Source source,
    134     const Browser* browser,
    135     const gfx::Rect& display_config);
    136 
    137 #endif  // CHROME_BROWSER_UI_WINDOW_SIZER_WINDOW_SIZER_COMMON_UNITTEST_H_
    138