| Index: ui/display/chromeos/x11/native_display_event_dispatcher_x11_unittest.cc
 | 
| diff --git a/ui/display/chromeos/x11/native_display_event_dispatcher_x11_unittest.cc b/ui/display/chromeos/x11/native_display_event_dispatcher_x11_unittest.cc
 | 
| deleted file mode 100644
 | 
| index 5dda0a6b3ef007ffe51a99e4b0ec986ba421c2ee..0000000000000000000000000000000000000000
 | 
| --- a/ui/display/chromeos/x11/native_display_event_dispatcher_x11_unittest.cc
 | 
| +++ /dev/null
 | 
| @@ -1,337 +0,0 @@
 | 
| -// Copyright 2014 The Chromium Authors. All rights reserved.
 | 
| -// Use of this source code is governed by a BSD-style license that can be
 | 
| -// found in the LICENSE file.
 | 
| -
 | 
| -#include <stdint.h>
 | 
| -#include <X11/extensions/Xrandr.h>
 | 
| -
 | 
| -#undef Bool
 | 
| -#undef None
 | 
| -
 | 
| -#include "base/macros.h"
 | 
| -#include "base/test/simple_test_tick_clock.h"
 | 
| -#include "testing/gtest/include/gtest/gtest.h"
 | 
| -#include "ui/display/chromeos/x11/display_mode_x11.h"
 | 
| -#include "ui/display/chromeos/x11/display_snapshot_x11.h"
 | 
| -#include "ui/display/chromeos/x11/native_display_delegate_x11.h"
 | 
| -#include "ui/display/chromeos/x11/native_display_event_dispatcher_x11.h"
 | 
| -
 | 
| -namespace ui {
 | 
| -
 | 
| -namespace {
 | 
| -
 | 
| -DisplaySnapshotX11* CreateOutput(int64_t id,
 | 
| -                                 DisplayConnectionType type,
 | 
| -                                 RROutput output,
 | 
| -                                 RRCrtc crtc) {
 | 
| -  static const DisplayModeX11 kDefaultDisplayMode(gfx::Size(1, 1),
 | 
| -                                                  false,
 | 
| -                                                  60.0f,
 | 
| -                                                  20);
 | 
| -  std::vector<std::unique_ptr<const DisplayMode>> modes;
 | 
| -  const DisplayMode* mode;
 | 
| -
 | 
| -  modes.push_back(kDefaultDisplayMode.Clone());
 | 
| -  mode = modes.front().get();
 | 
| -
 | 
| -  DisplaySnapshotX11* snapshot = new DisplaySnapshotX11(
 | 
| -      id,
 | 
| -      gfx::Point(0, 0),
 | 
| -      gfx::Size(0, 0),
 | 
| -      type,
 | 
| -      false,
 | 
| -      false,
 | 
| -      std::string(),
 | 
| -      std::move(modes),
 | 
| -      std::vector<uint8_t>(),
 | 
| -      mode,
 | 
| -      NULL,
 | 
| -      output,
 | 
| -      crtc,
 | 
| -      0);
 | 
| -
 | 
| -  return snapshot;
 | 
| -}
 | 
| -
 | 
| -DisplaySnapshotX11* CreateExternalOutput(RROutput output, RRCrtc crtc) {
 | 
| -  return CreateOutput(static_cast<int64_t>(output),
 | 
| -                      DISPLAY_CONNECTION_TYPE_UNKNOWN,
 | 
| -                      output,
 | 
| -                      crtc);
 | 
| -}
 | 
| -
 | 
| -DisplaySnapshotX11* CreateInternalOutput(RROutput output, RRCrtc crtc) {
 | 
| -  return CreateOutput(0,
 | 
| -                      DISPLAY_CONNECTION_TYPE_INTERNAL,
 | 
| -                      output,
 | 
| -                      crtc);
 | 
| -}
 | 
| -
 | 
| -class TestHelperDelegate : public NativeDisplayDelegateX11::HelperDelegate {
 | 
| - public:
 | 
| -  TestHelperDelegate();
 | 
| -  ~TestHelperDelegate() override;
 | 
| -
 | 
| -  int num_calls_update_xrandr_config() const {
 | 
| -    return num_calls_update_xrandr_config_;
 | 
| -  }
 | 
| -
 | 
| -  int num_calls_notify_observers() const { return num_calls_notify_observers_; }
 | 
| -
 | 
| -  void set_cached_outputs(const std::vector<DisplaySnapshot*>& outputs) {
 | 
| -    cached_outputs_ = outputs;
 | 
| -  }
 | 
| -
 | 
| -  // NativeDisplayDelegateX11::HelperDelegate overrides:
 | 
| -  void UpdateXRandRConfiguration(const base::NativeEvent& event) override;
 | 
| -  const std::vector<DisplaySnapshot*>& GetCachedDisplays() const override;
 | 
| -  void NotifyDisplayObservers() override;
 | 
| -
 | 
| - private:
 | 
| -  int num_calls_update_xrandr_config_;
 | 
| -  int num_calls_notify_observers_;
 | 
| -
 | 
| -  std::vector<DisplaySnapshot*> cached_outputs_;
 | 
| -
 | 
| -  DISALLOW_COPY_AND_ASSIGN(TestHelperDelegate);
 | 
| -};
 | 
| -
 | 
| -TestHelperDelegate::TestHelperDelegate()
 | 
| -    : num_calls_update_xrandr_config_(0), num_calls_notify_observers_(0) {}
 | 
| -
 | 
| -TestHelperDelegate::~TestHelperDelegate() {}
 | 
| -
 | 
| -void TestHelperDelegate::UpdateXRandRConfiguration(
 | 
| -    const base::NativeEvent& event) {
 | 
| -  ++num_calls_update_xrandr_config_;
 | 
| -}
 | 
| -
 | 
| -const std::vector<DisplaySnapshot*>& TestHelperDelegate::GetCachedDisplays()
 | 
| -    const {
 | 
| -  return cached_outputs_;
 | 
| -}
 | 
| -
 | 
| -void TestHelperDelegate::NotifyDisplayObservers() {
 | 
| -  ++num_calls_notify_observers_;
 | 
| -}
 | 
| -
 | 
| -////////////////////////////////////////////////////////////////////////////////
 | 
| -// NativeDisplayEventDispatcherX11Test
 | 
| -
 | 
| -class NativeDisplayEventDispatcherX11Test : public testing::Test {
 | 
| - public:
 | 
| -  NativeDisplayEventDispatcherX11Test();
 | 
| -  ~NativeDisplayEventDispatcherX11Test() override;
 | 
| -
 | 
| - protected:
 | 
| -  void DispatchScreenChangeEvent();
 | 
| -  void DispatchOutputChangeEvent(RROutput output,
 | 
| -                                 RRCrtc crtc,
 | 
| -                                 RRMode mode,
 | 
| -                                 bool connected);
 | 
| -
 | 
| -  int xrandr_event_base_;
 | 
| -  std::unique_ptr<TestHelperDelegate> helper_delegate_;
 | 
| -  std::unique_ptr<NativeDisplayEventDispatcherX11> dispatcher_;
 | 
| -  base::SimpleTestTickClock* test_tick_clock_;  // Owned by |dispatcher_|.
 | 
| -
 | 
| - private:
 | 
| -  DISALLOW_COPY_AND_ASSIGN(NativeDisplayEventDispatcherX11Test);
 | 
| -};
 | 
| -
 | 
| -NativeDisplayEventDispatcherX11Test::NativeDisplayEventDispatcherX11Test()
 | 
| -    : xrandr_event_base_(10),
 | 
| -      helper_delegate_(new TestHelperDelegate()),
 | 
| -      dispatcher_(new NativeDisplayEventDispatcherX11(helper_delegate_.get(),
 | 
| -                                                      xrandr_event_base_)),
 | 
| -      test_tick_clock_(new base::SimpleTestTickClock) {
 | 
| -  test_tick_clock_->Advance(base::TimeDelta::FromMilliseconds(1));
 | 
| -  dispatcher_->SetTickClockForTest(
 | 
| -      std::unique_ptr<base::TickClock>(test_tick_clock_));
 | 
| -}
 | 
| -
 | 
| -NativeDisplayEventDispatcherX11Test::~NativeDisplayEventDispatcherX11Test() {}
 | 
| -
 | 
| -void NativeDisplayEventDispatcherX11Test::DispatchScreenChangeEvent() {
 | 
| -  XRRScreenChangeNotifyEvent event = {0};
 | 
| -  event.type = xrandr_event_base_ + RRScreenChangeNotify;
 | 
| -
 | 
| -  dispatcher_->DispatchEvent(reinterpret_cast<const PlatformEvent>(&event));
 | 
| -}
 | 
| -
 | 
| -void NativeDisplayEventDispatcherX11Test::DispatchOutputChangeEvent(
 | 
| -    RROutput output,
 | 
| -    RRCrtc crtc,
 | 
| -    RRMode mode,
 | 
| -    bool connected) {
 | 
| -  XRROutputChangeNotifyEvent event = {0};
 | 
| -  event.type = xrandr_event_base_ + RRNotify;
 | 
| -  event.subtype = RRNotify_OutputChange;
 | 
| -  event.output = output;
 | 
| -  event.crtc = crtc;
 | 
| -  event.mode = mode;
 | 
| -  event.connection = connected ? RR_Connected : RR_Disconnected;
 | 
| -
 | 
| -  dispatcher_->DispatchEvent(reinterpret_cast<const PlatformEvent>(&event));
 | 
| -}
 | 
| -
 | 
| -}  // namespace
 | 
| -
 | 
| -TEST_F(NativeDisplayEventDispatcherX11Test, OnScreenChangedEvent) {
 | 
| -  DispatchScreenChangeEvent();
 | 
| -  EXPECT_EQ(1, helper_delegate_->num_calls_update_xrandr_config());
 | 
| -  EXPECT_EQ(0, helper_delegate_->num_calls_notify_observers());
 | 
| -}
 | 
| -
 | 
| -TEST_F(NativeDisplayEventDispatcherX11Test, CheckNotificationOnFirstEvent) {
 | 
| -  DispatchOutputChangeEvent(1, 10, 20, true);
 | 
| -  EXPECT_EQ(0, helper_delegate_->num_calls_update_xrandr_config());
 | 
| -  EXPECT_EQ(1, helper_delegate_->num_calls_notify_observers());
 | 
| -}
 | 
| -
 | 
| -TEST_F(NativeDisplayEventDispatcherX11Test, CheckNotificationAfterSecondEvent) {
 | 
| -  DispatchOutputChangeEvent(1, 10, 20, true);
 | 
| -
 | 
| -  // Simulate addition of the first output to the cached output list.
 | 
| -  ScopedVector<DisplaySnapshot> outputs;
 | 
| -  outputs.push_back(CreateExternalOutput(1, 10));
 | 
| -  helper_delegate_->set_cached_outputs(outputs.get());
 | 
| -
 | 
| -  DispatchOutputChangeEvent(2, 11, 20, true);
 | 
| -  EXPECT_EQ(2, helper_delegate_->num_calls_notify_observers());
 | 
| -}
 | 
| -
 | 
| -TEST_F(NativeDisplayEventDispatcherX11Test, CheckNotificationOnDisconnect) {
 | 
| -  ScopedVector<DisplaySnapshot> outputs;
 | 
| -  outputs.push_back(CreateExternalOutput(1, 10));
 | 
| -  helper_delegate_->set_cached_outputs(outputs.get());
 | 
| -
 | 
| -  DispatchOutputChangeEvent(1, 10, 20, false);
 | 
| -  EXPECT_EQ(1, helper_delegate_->num_calls_notify_observers());
 | 
| -}
 | 
| -
 | 
| -TEST_F(NativeDisplayEventDispatcherX11Test, CheckNotificationOnModeChange) {
 | 
| -  ScopedVector<DisplaySnapshot> outputs;
 | 
| -  outputs.push_back(CreateExternalOutput(1, 10));
 | 
| -  helper_delegate_->set_cached_outputs(outputs.get());
 | 
| -
 | 
| -  DispatchOutputChangeEvent(1, 10, 21, true);
 | 
| -  EXPECT_EQ(1, helper_delegate_->num_calls_notify_observers());
 | 
| -}
 | 
| -
 | 
| -TEST_F(NativeDisplayEventDispatcherX11Test, CheckNotificationOnSecondOutput) {
 | 
| -  ScopedVector<DisplaySnapshot> outputs;
 | 
| -  outputs.push_back(CreateExternalOutput(1, 10));
 | 
| -  helper_delegate_->set_cached_outputs(outputs.get());
 | 
| -
 | 
| -  DispatchOutputChangeEvent(2, 11, 20, true);
 | 
| -  EXPECT_EQ(1, helper_delegate_->num_calls_notify_observers());
 | 
| -}
 | 
| -
 | 
| -TEST_F(NativeDisplayEventDispatcherX11Test, CheckNotificationOnDifferentCrtc) {
 | 
| -  ScopedVector<DisplaySnapshot> outputs;
 | 
| -  outputs.push_back(CreateExternalOutput(1, 10));
 | 
| -  helper_delegate_->set_cached_outputs(outputs.get());
 | 
| -
 | 
| -  DispatchOutputChangeEvent(1, 11, 20, true);
 | 
| -  EXPECT_EQ(1, helper_delegate_->num_calls_notify_observers());
 | 
| -}
 | 
| -
 | 
| -TEST_F(NativeDisplayEventDispatcherX11Test,
 | 
| -       CheckNotificationOnSecondOutputDisconnect) {
 | 
| -  ScopedVector<DisplaySnapshot> outputs;
 | 
| -  outputs.push_back(CreateExternalOutput(1, 10));
 | 
| -  outputs.push_back(CreateExternalOutput(2, 11));
 | 
| -  helper_delegate_->set_cached_outputs(outputs.get());
 | 
| -
 | 
| -  DispatchOutputChangeEvent(2, 11, 20, false);
 | 
| -  EXPECT_EQ(1, helper_delegate_->num_calls_notify_observers());
 | 
| -}
 | 
| -
 | 
| -TEST_F(NativeDisplayEventDispatcherX11Test,
 | 
| -       AvoidDuplicateNotificationOnSecondOutputDisconnect) {
 | 
| -  ScopedVector<DisplaySnapshot> outputs;
 | 
| -  outputs.push_back(CreateExternalOutput(1, 10));
 | 
| -  outputs.push_back(CreateExternalOutput(2, 11));
 | 
| -  helper_delegate_->set_cached_outputs(outputs.get());
 | 
| -
 | 
| -  DispatchOutputChangeEvent(2, 11, 20, false);
 | 
| -  EXPECT_EQ(1, helper_delegate_->num_calls_notify_observers());
 | 
| -
 | 
| -  // Simulate removal of second output from cached output list.
 | 
| -  outputs.erase(outputs.begin() + 1);
 | 
| -  helper_delegate_->set_cached_outputs(outputs.get());
 | 
| -
 | 
| -  DispatchOutputChangeEvent(2, 11, 20, false);
 | 
| -  EXPECT_EQ(1, helper_delegate_->num_calls_notify_observers());
 | 
| -}
 | 
| -
 | 
| -TEST_F(NativeDisplayEventDispatcherX11Test,
 | 
| -       ForceUpdateAfterCacheExpiration) {
 | 
| -  // +1 to compenstate a possible rounding error.
 | 
| -  const int kHalfOfExpirationMs =
 | 
| -      NativeDisplayEventDispatcherX11::kUseCacheAfterStartupMs / 2 + 1;
 | 
| -
 | 
| -  ScopedVector<DisplaySnapshot> outputs;
 | 
| -  outputs.push_back(CreateExternalOutput(1, 10));
 | 
| -  outputs.push_back(CreateExternalOutput(2, 11));
 | 
| -  helper_delegate_->set_cached_outputs(outputs.get());
 | 
| -
 | 
| -  EXPECT_EQ(0, helper_delegate_->num_calls_notify_observers());
 | 
| -
 | 
| -  // Duplicated event will be ignored during the startup.
 | 
| -  DispatchOutputChangeEvent(2, 11, 20, true);
 | 
| -  EXPECT_EQ(0, helper_delegate_->num_calls_notify_observers());
 | 
| -
 | 
| -  test_tick_clock_->Advance(base::TimeDelta::FromMilliseconds(
 | 
| -      kHalfOfExpirationMs));
 | 
| -
 | 
| -  // Duplicated event will still be ignored.
 | 
| -  DispatchOutputChangeEvent(2, 11, 20, true);
 | 
| -  EXPECT_EQ(0, helper_delegate_->num_calls_notify_observers());
 | 
| -
 | 
| -  // The startup timeout has been elapsed. Duplicated event
 | 
| -  // should not be ignored.
 | 
| -  test_tick_clock_->Advance(
 | 
| -      base::TimeDelta::FromMilliseconds(kHalfOfExpirationMs));
 | 
| -  DispatchOutputChangeEvent(2, 11, 20, true);
 | 
| -  EXPECT_EQ(1, helper_delegate_->num_calls_notify_observers());
 | 
| -
 | 
| -  // Sending the same event immediately shoudldn't be ignored.
 | 
| -  DispatchOutputChangeEvent(2, 11, 20, true);
 | 
| -  EXPECT_EQ(2, helper_delegate_->num_calls_notify_observers());
 | 
| -
 | 
| -  // Advancing time further should not change the behavior.
 | 
| -  test_tick_clock_->Advance(base::TimeDelta::FromMilliseconds(
 | 
| -      kHalfOfExpirationMs));
 | 
| -  DispatchOutputChangeEvent(2, 11, 20, true);
 | 
| -  EXPECT_EQ(3, helper_delegate_->num_calls_notify_observers());
 | 
| -
 | 
| -  test_tick_clock_->Advance(
 | 
| -      base::TimeDelta::FromMilliseconds(kHalfOfExpirationMs));
 | 
| -  DispatchOutputChangeEvent(2, 11, 20, true);
 | 
| -  EXPECT_EQ(4, helper_delegate_->num_calls_notify_observers());
 | 
| -}
 | 
| -
 | 
| -TEST_F(NativeDisplayEventDispatcherX11Test,
 | 
| -       UpdateMissingExternalDisplayId) {
 | 
| -  ScopedVector<DisplaySnapshot> outputs;
 | 
| -  outputs.push_back(CreateInternalOutput(1, 10));
 | 
| -  helper_delegate_->set_cached_outputs(outputs.get());
 | 
| -
 | 
| -  ASSERT_EQ(0, helper_delegate_->num_calls_notify_observers());
 | 
| -
 | 
| -  // Internal display's ID can be zero and not updated.
 | 
| -  DispatchOutputChangeEvent(1, 10, 20, true);
 | 
| -  EXPECT_EQ(0, helper_delegate_->num_calls_notify_observers());
 | 
| -
 | 
| -  outputs.clear();
 | 
| -  outputs.push_back(CreateOutput(0, DISPLAY_CONNECTION_TYPE_UNKNOWN, 2, 11));
 | 
| -  helper_delegate_->set_cached_outputs(outputs.get());
 | 
| -
 | 
| -  // External display should be updated if the id is zero.
 | 
| -  DispatchOutputChangeEvent(2, 11, 20, true);
 | 
| -  EXPECT_EQ(1, helper_delegate_->num_calls_notify_observers());
 | 
| -}
 | 
| -
 | 
| -}  // namespace ui
 | 
| 
 |