15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef UI_AURA_TEST_TEST_WINDOW_DELEGATE_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define UI_AURA_TEST_TEST_WINDOW_DELEGATE_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "third_party/skia/include/core/SkColor.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/aura/window_delegate.h" 13d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/events/keycodes/keyboard_codes.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/rect.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace aura { 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace test { 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// WindowDelegate implementation with all methods stubbed out. 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TestWindowDelegate : public WindowDelegate { 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestWindowDelegate(); 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~TestWindowDelegate(); 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns a TestWindowDelegate that delete itself when 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the associated window is destroyed. 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static TestWindowDelegate* CreateSelfDestroyingDelegate(); 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_window_component(int window_component) { 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window_component_ = window_component; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_minimum_size(const gfx::Size& minimum_size) { 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) minimum_size_ = minimum_size; 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_maximum_size(const gfx::Size& maximum_size) { 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) maximum_size_ = maximum_size; 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Sets the return value for CanFocus(). Default is true. 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_can_focus(bool can_focus) { can_focus_ = can_focus; } 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Overridden from WindowDelegate: 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual gfx::Size GetMinimumSize() const OVERRIDE; 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual gfx::Size GetMaximumSize() const OVERRIDE; 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnBoundsChanged(const gfx::Rect& old_bounds, 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Rect& new_bounds) OVERRIDE; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual gfx::NativeCursor GetCursor(const gfx::Point& point) OVERRIDE; 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual int GetNonClientComponent(const gfx::Point& point) const OVERRIDE; 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool ShouldDescendIntoChildForEventHandling( 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Window* child, 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Point& location) OVERRIDE; 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool CanFocus() OVERRIDE; 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnCaptureLost() OVERRIDE; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE; 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnDeviceScaleFactorChanged(float device_scale_factor) OVERRIDE; 58a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual void OnWindowDestroying(Window* window) OVERRIDE; 59a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual void OnWindowDestroyed(Window* window) OVERRIDE; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnWindowTargetVisibilityChanged(bool visible) OVERRIDE; 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool HasHitTestMask() const OVERRIDE; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void GetHitTestMask(gfx::Path* mask) const OVERRIDE; 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int window_component_; 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool delete_on_destroyed_; 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Size minimum_size_; 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Size maximum_size_; 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool can_focus_; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TestWindowDelegate); 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A simple WindowDelegate implementation for these tests. It owns itself 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// (deletes itself when the Window it is attached to is destroyed). 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ColorTestWindowDelegate : public TestWindowDelegate { 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit ColorTestWindowDelegate(SkColor color); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~ColorTestWindowDelegate(); 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::KeyboardCode last_key_code() const { return last_key_code_; } 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Overridden from TestWindowDelegate: 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnKeyEvent(ui::KeyEvent* event) OVERRIDE; 85a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual void OnWindowDestroyed(Window* window) OVERRIDE; 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE; 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SkColor color_; 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::KeyboardCode last_key_code_; 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(ColorTestWindowDelegate); 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A simple WindowDelegate that has a hit-test mask. 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MaskedWindowDelegate : public TestWindowDelegate { 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit MaskedWindowDelegate(const gfx::Rect mask_rect); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Overridden from TestWindowDelegate: 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool HasHitTestMask() const OVERRIDE; 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void GetHitTestMask(gfx::Path* mask) const OVERRIDE; 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect mask_rect_; 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(MaskedWindowDelegate); 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Keeps track of mouse/key events. 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class EventCountDelegate : public TestWindowDelegate { 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EventCountDelegate(); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Overridden from TestWindowDelegate: 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnKeyEvent(ui::KeyEvent* event) OVERRIDE; 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnMouseEvent(ui::MouseEvent* event) OVERRIDE; 1185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void OnGestureEvent(ui::GestureEvent* event) OVERRIDE; 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the counts of mouse motion events in the 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // form of "<enter> <move> <leave>". 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string GetMouseMotionCountsAndReset(); 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the counts of mouse button events in the 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // form of "<press> <release>". 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string GetMouseButtonCountsAndReset(); 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the counts of key events in the form of 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // "<press> <release>". 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string GetKeyCountsAndReset(); 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Returns number of gesture events. 1335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int GetGestureCountAndReset(); 1345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int mouse_enter_count_; 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int mouse_move_count_; 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int mouse_leave_count_; 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int mouse_press_count_; 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int mouse_release_count_; 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int key_press_count_; 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int key_release_count_; 1435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int gesture_count_; 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(EventCountDelegate); 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace test 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace aura 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // UI_AURA_TEST_TEST_WINDOW_DELEGATE_H_ 152