Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / chromeos / display / output_configurator_unittest.cc
index 7c74bd3..b269c7b 100644 (file)
@@ -20,32 +20,33 @@ namespace chromeos {
 
 namespace {
 
-// Strings returned by TestDelegate::GetActionsAndClear() to describe various
-// actions that were performed.
+// Strings returned by TestNativeDisplayDelegate::GetActionsAndClear() to
+// describe various actions that were performed.
 const char kInitXRandR[] = "init";
 const char kUpdateXRandR[] = "update";
 const char kGrab[] = "grab";
 const char kUngrab[] = "ungrab";
 const char kSync[] = "sync";
 const char kForceDPMS[] = "dpms";
-const char kProjectingOn[] = "projecting";
-const char kProjectingOff[] = "not_projecting";
 
-// String returned by TestDelegate::GetActionsAndClear() if no actions were
-// requested.
+// String returned by TestNativeDisplayDelegate::GetActionsAndClear() if no
+// actions were requested.
 const char kNoActions[] = "";
 
-// Returns a string describing a TestDelegate::SetBackgroundColor() call.
+// Returns a string describing a TestNativeDisplayDelegate::SetBackgroundColor()
+// call.
 std::string GetBackgroundAction(uint32 color_argb) {
   return base::StringPrintf("background(0x%x)", color_argb);
 }
 
-// Returns a string describing a TestDelegate::AddOutputMode() call.
+// Returns a string describing a TestNativeDisplayDelegate::AddOutputMode()
+// call.
 std::string GetAddOutputModeAction(RROutput output, RRMode mode) {
   return base::StringPrintf("add_mode(output=%lu,mode=%lu)", output, mode);
 }
 
-// Returns a string describing a TestDelegate::ConfigureCrtc() call.
+// Returns a string describing a TestNativeDisplayDelegate::ConfigureCrtc()
+// call.
 std::string GetCrtcAction(RRCrtc crtc,
                           int x,
                           int y,
@@ -55,7 +56,8 @@ std::string GetCrtcAction(RRCrtc crtc,
                             crtc, x, y, mode, output);
 }
 
-// Returns a string describing a TestDelegate::CreateFramebuffer() call.
+// Returns a string describing a TestNativeDisplayDelegate::CreateFramebuffer()
+// call.
 std::string GetFramebufferAction(int width,
                                  int height,
                                  RRCrtc crtc1,
@@ -65,7 +67,7 @@ std::string GetFramebufferAction(int width,
       width, height, crtc1, crtc2);
 }
 
-// Returns a string describing a TestDelegate::ConfigureCTM() call.
+// Returns a string describing a TestNativeDisplayDelegate::ConfigureCTM() call.
 std::string GetCTMAction(
     int device_id,
     const OutputConfigurator::CoordinateTransformation& ctm) {
@@ -73,14 +75,14 @@ std::string GetCTMAction(
       ctm.x_scale, ctm.x_offset, ctm.y_scale, ctm.y_offset);
 }
 
-// Returns a string describing a TestDelegate::SetHDCPState() call.
-std::string GetSetHDCPStateAction(RROutput id, HDCPState state) {
+// Returns a string describing a TestNativeDisplayDelegate::SetHDCPState() call.
+std::string GetSetHDCPStateAction(RROutput id, ui::HDCPState state) {
   return base::StringPrintf("set_hdcp(id=%lu,state=%d)", id, state);
 }
 
 // Joins a sequence of strings describing actions (e.g. kScreenDim) such
 // that they can be compared against a string returned by
-// TestDelegate::GetActionsAndClear().  The list of actions must be
+// ActionLogger::GetActionsAndClear().  The list of actions must be
 // terminated by a NULL pointer.
 std::string JoinActions(const char* action, ...) {
   std::string actions;
@@ -97,14 +99,72 @@ std::string JoinActions(const char* action, ...) {
   return actions;
 }
 
-class TestDelegate : public OutputConfigurator::Delegate {
+class ActionLogger {
+ public:
+  ActionLogger() {}
+
+  void AppendAction(const std::string& action) {
+    if (!actions_.empty())
+      actions_ += ",";
+    actions_ += action;
+  }
+
+  // Returns a comma-separated string describing the actions that were
+  // requested since the previous call to GetActionsAndClear() (i.e.
+  // results are non-repeatable).
+  std::string GetActionsAndClear() {
+    std::string actions = actions_;
+    actions_.clear();
+    return actions;
+  }
+
+ private:
+  std::string actions_;
+
+  DISALLOW_COPY_AND_ASSIGN(ActionLogger);
+};
+
+class TestTouchscreenDelegate : public OutputConfigurator::TouchscreenDelegate {
+ public:
+  // Ownership of |log| remains with the caller.
+  explicit TestTouchscreenDelegate(ActionLogger* log) : log_(log) {}
+  virtual ~TestTouchscreenDelegate() {}
+
+  const OutputConfigurator::CoordinateTransformation& GetCTM(
+      int touch_device_id) {
+    return ctms_[touch_device_id];
+  }
+
+  // OutputConfigurator::TouchscreenDelegate implementation:
+  virtual void AssociateTouchscreens(
+      std::vector<OutputConfigurator::OutputSnapshot>* outputs) OVERRIDE {}
+  virtual void ConfigureCTM(
+      int touch_device_id,
+      const OutputConfigurator::CoordinateTransformation& ctm) OVERRIDE {
+    log_->AppendAction(GetCTMAction(touch_device_id, ctm));
+    ctms_[touch_device_id] = ctm;
+  }
+
+ private:
+  ActionLogger* log_;  // Not owned.
+
+  // Most-recently-configured transformation matrices, keyed by touch device ID.
+  std::map<int, OutputConfigurator::CoordinateTransformation> ctms_;
+
+  DISALLOW_COPY_AND_ASSIGN(TestTouchscreenDelegate);
+};
+
+class TestNativeDisplayDelegate
+    : public OutputConfigurator::NativeDisplayDelegate {
  public:
   static const int kXRandREventBase = 10;
 
-  TestDelegate()
+  // Ownership of |log| remains with the caller.
+  explicit TestNativeDisplayDelegate(ActionLogger* log)
       : max_configurable_pixels_(0),
-        hdcp_state_(HDCP_STATE_UNDESIRED) {}
-  virtual ~TestDelegate() {}
+        hdcp_state_(ui::HDCP_STATE_UNDESIRED),
+        log_(log) {}
+  virtual ~TestNativeDisplayDelegate() {}
 
   const std::vector<OutputConfigurator::OutputSnapshot>& outputs() const {
     return outputs_;
@@ -118,49 +178,37 @@ class TestDelegate : public OutputConfigurator::Delegate {
     max_configurable_pixels_ = pixels;
   }
 
-  void set_hdcp_state(HDCPState state) { hdcp_state_ = state; }
-
-  // Returns a comma-separated string describing the actions that were
-  // requested since the previous call to GetActionsAndClear() (i.e.
-  // results are non-repeatable).
-  std::string GetActionsAndClear() {
-    std::string actions = actions_;
-    actions_.clear();
-    return actions;
-  }
-
-  const OutputConfigurator::CoordinateTransformation& get_ctm(
-      int touch_device_id) {
-    return ctms_[touch_device_id];
-  }
+  void set_hdcp_state(ui::HDCPState state) { hdcp_state_ = state; }
 
   // OutputConfigurator::Delegate overrides:
   virtual void InitXRandRExtension(int* event_base) OVERRIDE {
-    AppendAction(kInitXRandR);
+    log_->AppendAction(kInitXRandR);
     *event_base = kXRandREventBase;
   }
-  virtual void UpdateXRandRConfiguration(
-      const base::NativeEvent& event) OVERRIDE { AppendAction(kUpdateXRandR); }
-  virtual void GrabServer() OVERRIDE { AppendAction(kGrab); }
-  virtual void UngrabServer() OVERRIDE { AppendAction(kUngrab); }
-  virtual void SyncWithServer() OVERRIDE { AppendAction(kSync); }
+  virtual void UpdateXRandRConfiguration(const base::NativeEvent& event)
+      OVERRIDE {
+    log_->AppendAction(kUpdateXRandR);
+  }
+  virtual void GrabServer() OVERRIDE { log_->AppendAction(kGrab); }
+  virtual void UngrabServer() OVERRIDE { log_->AppendAction(kUngrab); }
+  virtual void SyncWithServer() OVERRIDE { log_->AppendAction(kSync); }
   virtual void SetBackgroundColor(uint32 color_argb) OVERRIDE {
-    AppendAction(GetBackgroundAction(color_argb));
+    log_->AppendAction(GetBackgroundAction(color_argb));
   }
-  virtual void ForceDPMSOn() OVERRIDE { AppendAction(kForceDPMS); }
+  virtual void ForceDPMSOn() OVERRIDE { log_->AppendAction(kForceDPMS); }
   virtual std::vector<OutputConfigurator::OutputSnapshot> GetOutputs()
       OVERRIDE {
     return outputs_;
   }
   virtual void AddOutputMode(RROutput output, RRMode mode) OVERRIDE {
-    AppendAction(GetAddOutputModeAction(output, mode));
+    log_->AppendAction(GetAddOutputModeAction(output, mode));
   }
   virtual bool ConfigureCrtc(RRCrtc crtc,
                              RRMode mode,
                              RROutput output,
                              int x,
                              int y) OVERRIDE {
-    AppendAction(GetCrtcAction(crtc, x, y, mode, output));
+    log_->AppendAction(GetCrtcAction(crtc, x, y, mode, output));
 
     if (max_configurable_pixels_ == 0)
       return true;
@@ -181,51 +229,23 @@ class TestDelegate : public OutputConfigurator::Delegate {
       int width,
       int height,
       const std::vector<OutputConfigurator::OutputSnapshot>& outputs) OVERRIDE {
-    AppendAction(
+    log_->AppendAction(
         GetFramebufferAction(width,
                              height,
                              outputs.size() >= 1 ? outputs[0].crtc : 0,
                              outputs.size() >= 2 ? outputs[1].crtc : 0));
   }
-  virtual void ConfigureCTM(
-      int touch_device_id,
-      const OutputConfigurator::CoordinateTransformation& ctm) OVERRIDE {
-    AppendAction(GetCTMAction(touch_device_id, ctm));
-    ctms_[touch_device_id] = ctm;
-  }
-  virtual void SendProjectingStateToPowerManager(bool projecting) OVERRIDE {
-    AppendAction(projecting ? kProjectingOn : kProjectingOff);
-  }
-
-  virtual bool GetHDCPState(RROutput id, HDCPState* state) OVERRIDE {
+  virtual bool GetHDCPState(RROutput id, ui::HDCPState* state) OVERRIDE {
     *state = hdcp_state_;
     return true;
   }
 
-  virtual bool SetHDCPState(RROutput id, HDCPState state) OVERRIDE {
-    AppendAction(GetSetHDCPStateAction(id, state));
+  virtual bool SetHDCPState(RROutput id, ui::HDCPState state) OVERRIDE {
+    log_->AppendAction(GetSetHDCPStateAction(id, state));
     return true;
   }
 
  private:
-  struct ModeDetails {
-    ModeDetails() : width(0), height(0), interlaced(false) {}
-    ModeDetails(int width, int height, bool interlaced)
-        : width(width),
-          height(height),
-          interlaced(interlaced) {}
-
-    int width;
-    int height;
-    bool interlaced;
-  };
-
-  void AppendAction(const std::string& action) {
-    if (!actions_.empty())
-      actions_ += ",";
-    actions_ += action;
-  }
-
   OutputConfigurator::OutputSnapshot* GetOutputFromId(RROutput output_id) {
     for (unsigned int i = 0; i < outputs_.size(); i++) {
       if (outputs_[i].output == output_id)
@@ -234,16 +254,9 @@ class TestDelegate : public OutputConfigurator::Delegate {
     return NULL;
   }
 
-  std::map<RRMode, ModeDetails> modes_;
-
-  // Most-recently-configured transformation matrices, keyed by touch device ID.
-  std::map<int, OutputConfigurator::CoordinateTransformation> ctms_;
-
   // Outputs to be returned by GetOutputs().
   std::vector<OutputConfigurator::OutputSnapshot> outputs_;
 
-  std::string actions_;
-
   // |max_configurable_pixels_| represents the maximum number of pixels that
   // ConfigureCrtc will support.  Tests can use this to force ConfigureCrtc
   // to fail if attempting to set a resolution that is higher than what
@@ -253,9 +266,11 @@ class TestDelegate : public OutputConfigurator::Delegate {
   int  max_configurable_pixels_;
 
   // Result value of GetHDCPState().
-  HDCPState hdcp_state_;
+  ui::HDCPState hdcp_state_;
 
-  DISALLOW_COPY_AND_ASSIGN(TestDelegate);
+  ActionLogger* log_;  // Not owned.
+
+  DISALLOW_COPY_AND_ASSIGN(TestNativeDisplayDelegate);
 };
 
 class TestObserver : public OutputConfigurator::Observer {
@@ -275,13 +290,13 @@ class TestObserver : public OutputConfigurator::Observer {
       const {
     return latest_outputs_;
   }
-  OutputState latest_failed_state() const { return latest_failed_state_; }
+  ui::OutputState latest_failed_state() const { return latest_failed_state_; }
 
   void Reset() {
     num_changes_ = 0;
     num_failures_ = 0;
     latest_outputs_.clear();
-    latest_failed_state_ = STATE_INVALID;
+    latest_failed_state_ = ui::OUTPUT_STATE_INVALID;
   }
 
   // OutputConfigurator::Observer overrides:
@@ -291,7 +306,7 @@ class TestObserver : public OutputConfigurator::Observer {
     latest_outputs_ = outputs;
   }
 
-  virtual void OnDisplayModeChangeFailed(OutputState failed_new_state)
+  virtual void OnDisplayModeChangeFailed(ui::OutputState failed_new_state)
       OVERRIDE {
     num_failures_++;
     latest_failed_state_ = failed_new_state;
@@ -306,21 +321,23 @@ class TestObserver : public OutputConfigurator::Observer {
 
   // Parameters most recently passed to OnDisplayMode*().
   std::vector<OutputConfigurator::OutputSnapshot> latest_outputs_;
-  OutputState latest_failed_state_;
+  ui::OutputState latest_failed_state_;
 
   DISALLOW_COPY_AND_ASSIGN(TestObserver);
 };
 
 class TestStateController : public OutputConfigurator::StateController {
  public:
-  TestStateController() : state_(STATE_DUAL_EXTENDED) {}
+  TestStateController() : state_(ui::OUTPUT_STATE_DUAL_EXTENDED) {}
   virtual ~TestStateController() {}
 
-  void set_state(OutputState state) { state_ = state; }
+  void set_state(ui::OutputState state) { state_ = state; }
 
   // OutputConfigurator::StateController overrides:
-  virtual OutputState GetStateForDisplayIds(
-      const std::vector<int64>& outputs) const OVERRIDE { return state_; }
+  virtual ui::OutputState GetStateForDisplayIds(
+      const std::vector<int64>& outputs) const OVERRIDE {
+    return state_;
+  }
   virtual bool GetResolutionForDisplayId(
       int64 display_id,
       int *width,
@@ -329,7 +346,7 @@ class TestStateController : public OutputConfigurator::StateController {
   }
 
  private:
-  OutputState state_;
+  ui::OutputState state_;
 
   DISALLOW_COPY_AND_ASSIGN(TestStateController);
 };
@@ -367,13 +384,23 @@ class OutputConfiguratorTest : public testing::Test {
 
   OutputConfiguratorTest()
       : observer_(&configurator_),
-        test_api_(&configurator_, TestDelegate::kXRandREventBase) {}
+        test_api_(&configurator_, TestNativeDisplayDelegate::kXRandREventBase) {
+  }
   virtual ~OutputConfiguratorTest() {}
 
   virtual void SetUp() OVERRIDE {
-    delegate_ = new TestDelegate();
-    configurator_.SetDelegateForTesting(
-        scoped_ptr<OutputConfigurator::Delegate>(delegate_));
+    log_.reset(new ActionLogger());
+
+    native_display_delegate_ = new TestNativeDisplayDelegate(log_.get());
+    configurator_.SetNativeDisplayDelegateForTesting(
+        scoped_ptr<OutputConfigurator::NativeDisplayDelegate>(
+            native_display_delegate_));
+
+    touchscreen_delegate_ = new TestTouchscreenDelegate(log_.get());
+    configurator_.SetTouchscreenDelegateForTesting(
+        scoped_ptr<OutputConfigurator::TouchscreenDelegate>(
+            touchscreen_delegate_));
+
     configurator_.set_state_controller(&state_controller_);
     configurator_.set_mirroring_controller(&mirroring_controller_);
 
@@ -390,7 +417,7 @@ class OutputConfiguratorTest : public testing::Test {
     o->crtc = 10;
     o->current_mode = kSmallModeId;
     o->native_mode = kSmallModeId;
-    o->type = OUTPUT_TYPE_INTERNAL;
+    o->type = ui::OUTPUT_TYPE_INTERNAL;
     o->is_aspect_preserving_scaling = true;
     o->mode_infos[kSmallModeId] = small_mode_info;
     o->has_display_id = true;
@@ -402,7 +429,7 @@ class OutputConfiguratorTest : public testing::Test {
     o->crtc = 11;
     o->current_mode = kBigModeId;
     o->native_mode = kBigModeId;
-    o->type = OUTPUT_TYPE_HDMI;
+    o->type = ui::OUTPUT_TYPE_HDMI;
     o->is_aspect_preserving_scaling = true;
     o->mode_infos[kSmallModeId] = small_mode_info;
     o->mode_infos[kBigModeId] = big_mode_info;
@@ -414,7 +441,8 @@ class OutputConfiguratorTest : public testing::Test {
   }
 
  protected:
-  // Configures |delegate_| to return the first |num_outputs| entries from
+  // Configures |native_display_delegate_| to return the first |num_outputs|
+  // entries from
   // |outputs_|. If |send_events| is true, also sends screen-change and
   // output-change events to |configurator_| and triggers the configure
   // timeout if one was scheduled.
@@ -423,7 +451,7 @@ class OutputConfiguratorTest : public testing::Test {
     std::vector<OutputConfigurator::OutputSnapshot> outputs;
     for (size_t i = 0; i < num_outputs; ++i)
       outputs.push_back(outputs_[i]);
-    delegate_->set_outputs(outputs);
+    native_display_delegate_->set_outputs(outputs);
 
     if (send_events) {
       test_api_.SendScreenChangeEvent();
@@ -440,17 +468,23 @@ class OutputConfiguratorTest : public testing::Test {
   // Initializes |configurator_| with a single internal display.
   void InitWithSingleOutput() {
     UpdateOutputs(1, false);
-    EXPECT_EQ(kNoActions, delegate_->GetActionsAndClear());
+    EXPECT_EQ(kNoActions, log_->GetActionsAndClear());
     configurator_.Init(false);
-    EXPECT_EQ(kNoActions, delegate_->GetActionsAndClear());
+    EXPECT_EQ(kNoActions, log_->GetActionsAndClear());
     configurator_.Start(0);
-    EXPECT_EQ(JoinActions(kGrab, kInitXRandR,
-                          GetFramebufferAction(kSmallModeWidth,
-                              kSmallModeHeight, outputs_[0].crtc, 0).c_str(),
-                          GetCrtcAction(outputs_[0].crtc, 0, 0, kSmallModeId,
-                                        outputs_[0].output).c_str(),
-                          kForceDPMS, kUngrab, kProjectingOff, NULL),
-              delegate_->GetActionsAndClear());
+    EXPECT_EQ(
+        JoinActions(
+            kGrab,
+            kInitXRandR,
+            GetFramebufferAction(
+                kSmallModeWidth, kSmallModeHeight, outputs_[0].crtc, 0).c_str(),
+            GetCrtcAction(
+                outputs_[0].crtc, 0, 0, kSmallModeId, outputs_[0].output)
+                .c_str(),
+            kForceDPMS,
+            kUngrab,
+            NULL),
+        log_->GetActionsAndClear());
   }
 
   base::MessageLoop message_loop_;
@@ -458,7 +492,9 @@ class OutputConfiguratorTest : public testing::Test {
   TestMirroringController mirroring_controller_;
   OutputConfigurator configurator_;
   TestObserver observer_;
-  TestDelegate* delegate_;  // not owned
+  scoped_ptr<ActionLogger> log_;
+  TestNativeDisplayDelegate* native_display_delegate_;  // not owned
+  TestTouchscreenDelegate* touchscreen_delegate_;  // not owned
   OutputConfigurator::TestApi test_api_;
 
   OutputConfigurator::OutputSnapshot outputs_[2];
@@ -543,99 +579,125 @@ TEST_F(OutputConfiguratorTest, ConnectSecondOutput) {
   // Connect a second output and check that the configurator enters
   // extended mode.
   observer_.Reset();
-  state_controller_.set_state(STATE_DUAL_EXTENDED);
+  state_controller_.set_state(ui::OUTPUT_STATE_DUAL_EXTENDED);
   UpdateOutputs(2, true);
   const int kDualHeight =
       kSmallModeHeight + OutputConfigurator::kVerticalGap + kBigModeHeight;
-  EXPECT_EQ(JoinActions(kUpdateXRandR, kGrab,
-                        GetFramebufferAction(kBigModeWidth, kDualHeight,
-                            outputs_[0].crtc, outputs_[1].crtc).c_str(),
-                        GetCrtcAction(outputs_[0].crtc, 0, 0, kSmallModeId,
-                            outputs_[0].output).c_str(),
-                        GetCrtcAction(outputs_[1].crtc, 0,
-                            kSmallModeHeight + OutputConfigurator::kVerticalGap,
-                            kBigModeId, outputs_[1].output).c_str(),
-                        kUngrab, kProjectingOn, NULL),
-            delegate_->GetActionsAndClear());
+  EXPECT_EQ(
+      JoinActions(
+          kUpdateXRandR,
+          kGrab,
+          GetFramebufferAction(
+              kBigModeWidth, kDualHeight, outputs_[0].crtc, outputs_[1].crtc)
+              .c_str(),
+          GetCrtcAction(
+              outputs_[0].crtc, 0, 0, kSmallModeId, outputs_[0].output).c_str(),
+          GetCrtcAction(outputs_[1].crtc,
+                        0,
+                        kSmallModeHeight + OutputConfigurator::kVerticalGap,
+                        kBigModeId,
+                        outputs_[1].output).c_str(),
+          kUngrab,
+          NULL),
+      log_->GetActionsAndClear());
   EXPECT_FALSE(mirroring_controller_.software_mirroring_enabled());
   EXPECT_EQ(1, observer_.num_changes());
 
   observer_.Reset();
-  EXPECT_TRUE(configurator_.SetDisplayMode(STATE_DUAL_MIRROR));
-  EXPECT_EQ(JoinActions(kGrab,
-                        GetFramebufferAction(kSmallModeWidth, kSmallModeHeight,
-                            outputs_[0].crtc, outputs_[1].crtc).c_str(),
-                        GetCrtcAction(outputs_[0].crtc, 0, 0, kSmallModeId,
-                            outputs_[0].output).c_str(),
-                        GetCrtcAction(outputs_[1].crtc, 0, 0, kSmallModeId,
-                            outputs_[1].output).c_str(),
-                        kUngrab, NULL),
-            delegate_->GetActionsAndClear());
+  EXPECT_TRUE(configurator_.SetDisplayMode(ui::OUTPUT_STATE_DUAL_MIRROR));
+  EXPECT_EQ(
+      JoinActions(
+          kGrab,
+          GetFramebufferAction(kSmallModeWidth,
+                               kSmallModeHeight,
+                               outputs_[0].crtc,
+                               outputs_[1].crtc).c_str(),
+          GetCrtcAction(
+              outputs_[0].crtc, 0, 0, kSmallModeId, outputs_[0].output).c_str(),
+          GetCrtcAction(
+              outputs_[1].crtc, 0, 0, kSmallModeId, outputs_[1].output).c_str(),
+          kUngrab,
+          NULL),
+      log_->GetActionsAndClear());
   EXPECT_FALSE(mirroring_controller_.software_mirroring_enabled());
   EXPECT_EQ(1, observer_.num_changes());
 
   // Disconnect the second output.
   observer_.Reset();
   UpdateOutputs(1, true);
-  EXPECT_EQ(JoinActions(kUpdateXRandR, kGrab,
-                        GetFramebufferAction(kSmallModeWidth, kSmallModeHeight,
-                            outputs_[0].crtc, 0).c_str(),
-                        GetCrtcAction(outputs_[0].crtc, 0, 0, kSmallModeId,
-                            outputs_[0].output).c_str(),
-                        kUngrab, kProjectingOff, NULL),
-            delegate_->GetActionsAndClear());
+  EXPECT_EQ(
+      JoinActions(
+          kUpdateXRandR,
+          kGrab,
+          GetFramebufferAction(
+              kSmallModeWidth, kSmallModeHeight, outputs_[0].crtc, 0).c_str(),
+          GetCrtcAction(
+              outputs_[0].crtc, 0, 0, kSmallModeId, outputs_[0].output).c_str(),
+          kUngrab,
+          NULL),
+      log_->GetActionsAndClear());
   EXPECT_FALSE(mirroring_controller_.software_mirroring_enabled());
   EXPECT_EQ(1, observer_.num_changes());
 
   // Get rid of shared modes to force software mirroring.
   outputs_[1].mode_infos.erase(kSmallModeId);
-  state_controller_.set_state(STATE_DUAL_EXTENDED);
+  state_controller_.set_state(ui::OUTPUT_STATE_DUAL_EXTENDED);
   UpdateOutputs(2, true);
-  EXPECT_EQ(JoinActions(kUpdateXRandR, kGrab,
-                        GetFramebufferAction(kBigModeWidth, kDualHeight,
-                            outputs_[0].crtc, outputs_[1].crtc).c_str(),
-                        GetCrtcAction(outputs_[0].crtc, 0, 0, kSmallModeId,
-                            outputs_[0].output).c_str(),
-                        GetCrtcAction(outputs_[1].crtc, 0,
-                            kSmallModeHeight + OutputConfigurator::kVerticalGap,
-                            kBigModeId, outputs_[1].output).c_str(),
-                        kUngrab, kProjectingOn, NULL),
-            delegate_->GetActionsAndClear());
+  EXPECT_EQ(
+      JoinActions(
+          kUpdateXRandR,
+          kGrab,
+          GetFramebufferAction(
+              kBigModeWidth, kDualHeight, outputs_[0].crtc, outputs_[1].crtc)
+              .c_str(),
+          GetCrtcAction(
+              outputs_[0].crtc, 0, 0, kSmallModeId, outputs_[0].output).c_str(),
+          GetCrtcAction(outputs_[1].crtc,
+                        0,
+                        kSmallModeHeight + OutputConfigurator::kVerticalGap,
+                        kBigModeId,
+                        outputs_[1].output).c_str(),
+          kUngrab,
+          NULL),
+      log_->GetActionsAndClear());
   EXPECT_FALSE(mirroring_controller_.software_mirroring_enabled());
 
   observer_.Reset();
-  EXPECT_TRUE(configurator_.SetDisplayMode(STATE_DUAL_MIRROR));
-  EXPECT_EQ(JoinActions(kGrab, kUngrab, NULL), delegate_->GetActionsAndClear());
-  EXPECT_EQ(STATE_DUAL_EXTENDED, configurator_.output_state());
+  EXPECT_TRUE(configurator_.SetDisplayMode(ui::OUTPUT_STATE_DUAL_MIRROR));
+  EXPECT_EQ(JoinActions(kGrab, kUngrab, NULL), log_->GetActionsAndClear());
+  EXPECT_EQ(ui::OUTPUT_STATE_DUAL_EXTENDED, configurator_.output_state());
   EXPECT_TRUE(mirroring_controller_.software_mirroring_enabled());
   EXPECT_EQ(1, observer_.num_changes());
 
-  // Setting STATE_DUAL_MIRROR should try to reconfigure.
+  // Setting OUTPUT_STATE_DUAL_MIRROR should try to reconfigure.
   observer_.Reset();
-  EXPECT_TRUE(configurator_.SetDisplayMode(STATE_DUAL_EXTENDED));
-  EXPECT_EQ(JoinActions(NULL), delegate_->GetActionsAndClear());
+  EXPECT_TRUE(configurator_.SetDisplayMode(ui::OUTPUT_STATE_DUAL_EXTENDED));
+  EXPECT_EQ(JoinActions(NULL), log_->GetActionsAndClear());
   EXPECT_FALSE(mirroring_controller_.software_mirroring_enabled());
   EXPECT_EQ(1, observer_.num_changes());
 
   // Set back to software mirror mode.
   observer_.Reset();
-  EXPECT_TRUE(configurator_.SetDisplayMode(STATE_DUAL_MIRROR));
-  EXPECT_EQ(JoinActions(kGrab, kUngrab, NULL),
-            delegate_->GetActionsAndClear());
-  EXPECT_EQ(STATE_DUAL_EXTENDED, configurator_.output_state());
+  EXPECT_TRUE(configurator_.SetDisplayMode(ui::OUTPUT_STATE_DUAL_MIRROR));
+  EXPECT_EQ(JoinActions(kGrab, kUngrab, NULL), log_->GetActionsAndClear());
+  EXPECT_EQ(ui::OUTPUT_STATE_DUAL_EXTENDED, configurator_.output_state());
   EXPECT_TRUE(mirroring_controller_.software_mirroring_enabled());
   EXPECT_EQ(1, observer_.num_changes());
 
   // Disconnect the second output.
   observer_.Reset();
   UpdateOutputs(1, true);
-  EXPECT_EQ(JoinActions(kUpdateXRandR, kGrab,
-                        GetFramebufferAction(kSmallModeWidth, kSmallModeHeight,
-                            outputs_[0].crtc, 0).c_str(),
-                        GetCrtcAction(outputs_[0].crtc, 0, 0, kSmallModeId,
-                            outputs_[0].output).c_str(),
-                        kUngrab, kProjectingOff, NULL),
-            delegate_->GetActionsAndClear());
+  EXPECT_EQ(
+      JoinActions(
+          kUpdateXRandR,
+          kGrab,
+          GetFramebufferAction(
+              kSmallModeWidth, kSmallModeHeight, outputs_[0].crtc, 0).c_str(),
+          GetCrtcAction(
+              outputs_[0].crtc, 0, 0, kSmallModeId, outputs_[0].output).c_str(),
+          kUngrab,
+          NULL),
+      log_->GetActionsAndClear());
   EXPECT_FALSE(mirroring_controller_.software_mirroring_enabled());
   EXPECT_EQ(1, observer_.num_changes());
 }
@@ -643,18 +705,24 @@ TEST_F(OutputConfiguratorTest, ConnectSecondOutput) {
 TEST_F(OutputConfiguratorTest, SetDisplayPower) {
   InitWithSingleOutput();
 
-  state_controller_.set_state(STATE_DUAL_MIRROR);
+  state_controller_.set_state(ui::OUTPUT_STATE_DUAL_MIRROR);
   observer_.Reset();
   UpdateOutputs(2, true);
-  EXPECT_EQ(JoinActions(kUpdateXRandR, kGrab,
-                        GetFramebufferAction(kSmallModeWidth, kSmallModeHeight,
-                            outputs_[0].crtc, outputs_[1].crtc).c_str(),
-                        GetCrtcAction(outputs_[0].crtc, 0, 0, kSmallModeId,
-                            outputs_[0].output).c_str(),
-                        GetCrtcAction(outputs_[1].crtc, 0, 0, kSmallModeId,
-                            outputs_[1].output).c_str(),
-                        kUngrab, kProjectingOn, NULL),
-            delegate_->GetActionsAndClear());
+  EXPECT_EQ(
+      JoinActions(
+          kUpdateXRandR,
+          kGrab,
+          GetFramebufferAction(kSmallModeWidth,
+                               kSmallModeHeight,
+                               outputs_[0].crtc,
+                               outputs_[1].crtc).c_str(),
+          GetCrtcAction(
+              outputs_[0].crtc, 0, 0, kSmallModeId, outputs_[0].output).c_str(),
+          GetCrtcAction(
+              outputs_[1].crtc, 0, 0, kSmallModeId, outputs_[1].output).c_str(),
+          kUngrab,
+          NULL),
+      log_->GetActionsAndClear());
   EXPECT_FALSE(mirroring_controller_.software_mirroring_enabled());
   EXPECT_EQ(1, observer_.num_changes());
 
@@ -663,16 +731,20 @@ TEST_F(OutputConfiguratorTest, SetDisplayPower) {
   observer_.Reset();
   configurator_.SetDisplayPower(DISPLAY_POWER_INTERNAL_OFF_EXTERNAL_ON,
                                 OutputConfigurator::kSetDisplayPowerNoFlags);
-  EXPECT_EQ(JoinActions(kGrab,
-                        GetFramebufferAction(kBigModeWidth, kBigModeHeight,
-                            outputs_[0].crtc, outputs_[1].crtc).c_str(),
-                        GetCrtcAction(outputs_[0].crtc, 0, 0, 0,
-                            outputs_[0].output).c_str(),
-                        GetCrtcAction(outputs_[1].crtc, 0, 0, kBigModeId,
-                            outputs_[1].output).c_str(),
-                        kForceDPMS, kUngrab, NULL),
-            delegate_->GetActionsAndClear());
-  EXPECT_EQ(STATE_SINGLE, configurator_.output_state());
+  EXPECT_EQ(
+      JoinActions(
+          kGrab,
+          GetFramebufferAction(
+              kBigModeWidth, kBigModeHeight, outputs_[0].crtc, outputs_[1].crtc)
+              .c_str(),
+          GetCrtcAction(outputs_[0].crtc, 0, 0, 0, outputs_[0].output).c_str(),
+          GetCrtcAction(outputs_[1].crtc, 0, 0, kBigModeId, outputs_[1].output)
+              .c_str(),
+          kForceDPMS,
+          kUngrab,
+          NULL),
+      log_->GetActionsAndClear());
+  EXPECT_EQ(ui::OUTPUT_STATE_SINGLE, configurator_.output_state());
   EXPECT_EQ(1, observer_.num_changes());
 
   // When all displays are turned off, the framebuffer should switch back
@@ -680,16 +752,19 @@ TEST_F(OutputConfiguratorTest, SetDisplayPower) {
   observer_.Reset();
   configurator_.SetDisplayPower(DISPLAY_POWER_ALL_OFF,
                                 OutputConfigurator::kSetDisplayPowerNoFlags);
-  EXPECT_EQ(JoinActions(kGrab,
-                        GetFramebufferAction(kSmallModeWidth, kSmallModeHeight,
-                            outputs_[0].crtc, outputs_[1].crtc).c_str(),
-                        GetCrtcAction(outputs_[0].crtc, 0, 0, 0,
-                            outputs_[0].output).c_str(),
-                        GetCrtcAction(outputs_[1].crtc, 0, 0, 0,
-                            outputs_[1].output).c_str(),
-                        kUngrab, NULL),
-            delegate_->GetActionsAndClear());
-  EXPECT_EQ(STATE_DUAL_MIRROR, configurator_.output_state());
+  EXPECT_EQ(
+      JoinActions(
+          kGrab,
+          GetFramebufferAction(kSmallModeWidth,
+                               kSmallModeHeight,
+                               outputs_[0].crtc,
+                               outputs_[1].crtc).c_str(),
+          GetCrtcAction(outputs_[0].crtc, 0, 0, 0, outputs_[0].output).c_str(),
+          GetCrtcAction(outputs_[1].crtc, 0, 0, 0, outputs_[1].output).c_str(),
+          kUngrab,
+          NULL),
+      log_->GetActionsAndClear());
+  EXPECT_EQ(ui::OUTPUT_STATE_DUAL_MIRROR, configurator_.output_state());
   EXPECT_FALSE(mirroring_controller_.software_mirroring_enabled());
   EXPECT_EQ(1, observer_.num_changes());
 
@@ -697,37 +772,50 @@ TEST_F(OutputConfiguratorTest, SetDisplayPower) {
   observer_.Reset();
   configurator_.SetDisplayPower(DISPLAY_POWER_ALL_ON,
                                 OutputConfigurator::kSetDisplayPowerNoFlags);
-  EXPECT_EQ(JoinActions(kGrab,
-                        GetFramebufferAction(kSmallModeWidth, kSmallModeHeight,
-                            outputs_[0].crtc, outputs_[1].crtc).c_str(),
-                        GetCrtcAction(outputs_[0].crtc, 0, 0, kSmallModeId,
-                            outputs_[0].output).c_str(),
-                        GetCrtcAction(outputs_[1].crtc, 0, 0, kSmallModeId,
-                            outputs_[1].output).c_str(),
-                        kForceDPMS, kUngrab, NULL),
-            delegate_->GetActionsAndClear());
-  EXPECT_EQ(STATE_DUAL_MIRROR, configurator_.output_state());
+  EXPECT_EQ(
+      JoinActions(
+          kGrab,
+          GetFramebufferAction(kSmallModeWidth,
+                               kSmallModeHeight,
+                               outputs_[0].crtc,
+                               outputs_[1].crtc).c_str(),
+          GetCrtcAction(
+              outputs_[0].crtc, 0, 0, kSmallModeId, outputs_[0].output).c_str(),
+          GetCrtcAction(
+              outputs_[1].crtc, 0, 0, kSmallModeId, outputs_[1].output).c_str(),
+          kForceDPMS,
+          kUngrab,
+          NULL),
+      log_->GetActionsAndClear());
+  EXPECT_EQ(ui::OUTPUT_STATE_DUAL_MIRROR, configurator_.output_state());
   EXPECT_FALSE(mirroring_controller_.software_mirroring_enabled());
   EXPECT_EQ(1, observer_.num_changes());
 
   // Get rid of shared modes to force software mirroring.
   outputs_[1].mode_infos.erase(kSmallModeId);
-  state_controller_.set_state(STATE_DUAL_MIRROR);
+  state_controller_.set_state(ui::OUTPUT_STATE_DUAL_MIRROR);
   observer_.Reset();
   UpdateOutputs(2, true);
   const int kDualHeight =
       kSmallModeHeight + OutputConfigurator::kVerticalGap + kBigModeHeight;
-  EXPECT_EQ(JoinActions(kUpdateXRandR, kGrab,
-                        GetFramebufferAction(kBigModeWidth, kDualHeight,
-                            outputs_[0].crtc, outputs_[1].crtc).c_str(),
-                        GetCrtcAction(outputs_[0].crtc, 0, 0, kSmallModeId,
-                            outputs_[0].output).c_str(),
-                        GetCrtcAction(outputs_[1].crtc, 0,
-                            kSmallModeHeight + OutputConfigurator::kVerticalGap,
-                            kBigModeId, outputs_[1].output).c_str(),
-                        kUngrab, kProjectingOn, NULL),
-            delegate_->GetActionsAndClear());
-  EXPECT_EQ(STATE_DUAL_EXTENDED, configurator_.output_state());
+  EXPECT_EQ(
+      JoinActions(
+          kUpdateXRandR,
+          kGrab,
+          GetFramebufferAction(
+              kBigModeWidth, kDualHeight, outputs_[0].crtc, outputs_[1].crtc)
+              .c_str(),
+          GetCrtcAction(
+              outputs_[0].crtc, 0, 0, kSmallModeId, outputs_[0].output).c_str(),
+          GetCrtcAction(outputs_[1].crtc,
+                        0,
+                        kSmallModeHeight + OutputConfigurator::kVerticalGap,
+                        kBigModeId,
+                        outputs_[1].output).c_str(),
+          kUngrab,
+          NULL),
+      log_->GetActionsAndClear());
+  EXPECT_EQ(ui::OUTPUT_STATE_DUAL_EXTENDED, configurator_.output_state());
   EXPECT_TRUE(mirroring_controller_.software_mirroring_enabled());
   EXPECT_EQ(1, observer_.num_changes());
 
@@ -736,16 +824,20 @@ TEST_F(OutputConfiguratorTest, SetDisplayPower) {
   observer_.Reset();
   configurator_.SetDisplayPower(DISPLAY_POWER_INTERNAL_OFF_EXTERNAL_ON,
                                 OutputConfigurator::kSetDisplayPowerNoFlags);
-  EXPECT_EQ(JoinActions(kGrab,
-                        GetFramebufferAction(kBigModeWidth, kBigModeHeight,
-                            outputs_[0].crtc, outputs_[1].crtc).c_str(),
-                        GetCrtcAction(outputs_[0].crtc, 0, 0, 0,
-                            outputs_[0].output).c_str(),
-                        GetCrtcAction(outputs_[1].crtc, 0, 0, kBigModeId,
-                            outputs_[1].output).c_str(),
-                        kForceDPMS, kUngrab, NULL),
-            delegate_->GetActionsAndClear());
-  EXPECT_EQ(STATE_SINGLE, configurator_.output_state());
+  EXPECT_EQ(
+      JoinActions(
+          kGrab,
+          GetFramebufferAction(
+              kBigModeWidth, kBigModeHeight, outputs_[0].crtc, outputs_[1].crtc)
+              .c_str(),
+          GetCrtcAction(outputs_[0].crtc, 0, 0, 0, outputs_[0].output).c_str(),
+          GetCrtcAction(outputs_[1].crtc, 0, 0, kBigModeId, outputs_[1].output)
+              .c_str(),
+          kForceDPMS,
+          kUngrab,
+          NULL),
+      log_->GetActionsAndClear());
+  EXPECT_EQ(ui::OUTPUT_STATE_SINGLE, configurator_.output_state());
   EXPECT_FALSE(mirroring_controller_.software_mirroring_enabled());
   EXPECT_EQ(1, observer_.num_changes());
 
@@ -754,17 +846,22 @@ TEST_F(OutputConfiguratorTest, SetDisplayPower) {
   observer_.Reset();
   configurator_.SetDisplayPower(DISPLAY_POWER_ALL_OFF,
                                 OutputConfigurator::kSetDisplayPowerNoFlags);
-  EXPECT_EQ(JoinActions(kGrab,
-                        GetFramebufferAction(kBigModeWidth, kDualHeight,
-                            outputs_[0].crtc, outputs_[1].crtc).c_str(),
-                        GetCrtcAction(outputs_[0].crtc, 0, 0, 0,
-                            outputs_[0].output).c_str(),
-                        GetCrtcAction(outputs_[1].crtc, 0,
-                            kSmallModeHeight + OutputConfigurator::kVerticalGap,
-                            0, outputs_[1].output).c_str(),
-                        kUngrab, NULL),
-            delegate_->GetActionsAndClear());
-  EXPECT_EQ(STATE_DUAL_EXTENDED, configurator_.output_state());
+  EXPECT_EQ(
+      JoinActions(
+          kGrab,
+          GetFramebufferAction(
+              kBigModeWidth, kDualHeight, outputs_[0].crtc, outputs_[1].crtc)
+              .c_str(),
+          GetCrtcAction(outputs_[0].crtc, 0, 0, 0, outputs_[0].output).c_str(),
+          GetCrtcAction(outputs_[1].crtc,
+                        0,
+                        kSmallModeHeight + OutputConfigurator::kVerticalGap,
+                        0,
+                        outputs_[1].output).c_str(),
+          kUngrab,
+          NULL),
+      log_->GetActionsAndClear());
+  EXPECT_EQ(ui::OUTPUT_STATE_DUAL_EXTENDED, configurator_.output_state());
   EXPECT_TRUE(mirroring_controller_.software_mirroring_enabled());
   EXPECT_EQ(1, observer_.num_changes());
 
@@ -772,62 +869,28 @@ TEST_F(OutputConfiguratorTest, SetDisplayPower) {
   observer_.Reset();
   configurator_.SetDisplayPower(DISPLAY_POWER_ALL_ON,
                                 OutputConfigurator::kSetDisplayPowerNoFlags);
-  EXPECT_EQ(JoinActions(kGrab,
-                        GetFramebufferAction(kBigModeWidth, kDualHeight,
-                            outputs_[0].crtc, outputs_[1].crtc).c_str(),
-                        GetCrtcAction(outputs_[0].crtc, 0, 0, kSmallModeId,
-                            outputs_[0].output).c_str(),
-                        GetCrtcAction(outputs_[1].crtc, 0,
-                            kSmallModeHeight + OutputConfigurator::kVerticalGap,
-                            kBigModeId, outputs_[1].output).c_str(),
-                        kForceDPMS, kUngrab, NULL),
-            delegate_->GetActionsAndClear());
-  EXPECT_EQ(STATE_DUAL_EXTENDED, configurator_.output_state());
+  EXPECT_EQ(
+      JoinActions(
+          kGrab,
+          GetFramebufferAction(
+              kBigModeWidth, kDualHeight, outputs_[0].crtc, outputs_[1].crtc)
+              .c_str(),
+          GetCrtcAction(
+              outputs_[0].crtc, 0, 0, kSmallModeId, outputs_[0].output).c_str(),
+          GetCrtcAction(outputs_[1].crtc,
+                        0,
+                        kSmallModeHeight + OutputConfigurator::kVerticalGap,
+                        kBigModeId,
+                        outputs_[1].output).c_str(),
+          kForceDPMS,
+          kUngrab,
+          NULL),
+      log_->GetActionsAndClear());
+  EXPECT_EQ(ui::OUTPUT_STATE_DUAL_EXTENDED, configurator_.output_state());
   EXPECT_TRUE(mirroring_controller_.software_mirroring_enabled());
   EXPECT_EQ(1, observer_.num_changes());
 }
 
-TEST_F(OutputConfiguratorTest, Casting) {
-  InitWithSingleOutput();
-
-  // Notify configurator that casting session is started.
-  configurator_.OnCastingSessionStartedOrStopped(true);
-  EXPECT_EQ(kProjectingOn, delegate_->GetActionsAndClear());
-
-  // Verify that the configurator keeps a count of active casting sessions
-  // instead of treating it as a single global state.
-  configurator_.OnCastingSessionStartedOrStopped(true);
-  EXPECT_EQ(kProjectingOn, delegate_->GetActionsAndClear());
-  configurator_.OnCastingSessionStartedOrStopped(false);
-  EXPECT_EQ(kProjectingOn, delegate_->GetActionsAndClear());
-
-  // Turn all displays off and check that projecting is not turned off.
-  configurator_.SetDisplayPower(DISPLAY_POWER_ALL_OFF,
-                                OutputConfigurator::kSetDisplayPowerNoFlags);
-  EXPECT_EQ(JoinActions(kGrab,
-                        GetFramebufferAction(kSmallModeWidth, kSmallModeHeight,
-                            outputs_[0].crtc, 0).c_str(),
-                        GetCrtcAction(outputs_[0].crtc, 0, 0, 0,
-                            outputs_[0].output).c_str(),
-                        kUngrab, NULL),
-            delegate_->GetActionsAndClear());
-
-  // Turn all displays back on.
-  configurator_.SetDisplayPower(DISPLAY_POWER_ALL_ON,
-                                OutputConfigurator::kSetDisplayPowerNoFlags);
-  EXPECT_EQ(JoinActions(kGrab,
-                        GetFramebufferAction(kSmallModeWidth, kSmallModeHeight,
-                            outputs_[0].crtc, 0).c_str(),
-                        GetCrtcAction(outputs_[0].crtc, 0, 0, kSmallModeId,
-                            outputs_[0].output).c_str(),
-                        kForceDPMS, kUngrab, NULL),
-            delegate_->GetActionsAndClear());
-
-  // Notify configurator that casting session is ended.
-  configurator_.OnCastingSessionStartedOrStopped(false);
-  EXPECT_EQ(kProjectingOff, delegate_->GetActionsAndClear());
-}
-
 TEST_F(OutputConfiguratorTest, SuspendAndResume) {
   InitWithSingleOutput();
 
@@ -835,169 +898,205 @@ TEST_F(OutputConfiguratorTest, SuspendAndResume) {
   // on.  The configurator should still reprobe on resume in case a display
   // was connected while suspended.
   configurator_.SuspendDisplays();
-  EXPECT_EQ(kNoActions, delegate_->GetActionsAndClear());
+  EXPECT_EQ(kNoActions, log_->GetActionsAndClear());
   configurator_.ResumeDisplays();
-  EXPECT_EQ(JoinActions(kGrab,
-                        GetFramebufferAction(kSmallModeWidth, kSmallModeHeight,
-                            outputs_[0].crtc, 0).c_str(),
-                        GetCrtcAction(outputs_[0].crtc, 0, 0, kSmallModeId,
-                            outputs_[0].output).c_str(),
-                        kForceDPMS, kUngrab, NULL),
-            delegate_->GetActionsAndClear());
+  EXPECT_EQ(
+      JoinActions(
+          kGrab,
+          GetFramebufferAction(
+              kSmallModeWidth, kSmallModeHeight, outputs_[0].crtc, 0).c_str(),
+          GetCrtcAction(
+              outputs_[0].crtc, 0, 0, kSmallModeId, outputs_[0].output).c_str(),
+          kForceDPMS,
+          kUngrab,
+          NULL),
+      log_->GetActionsAndClear());
 
   // Now turn the display off before suspending and check that the
   // configurator turns it back on and syncs with the server.
   configurator_.SetDisplayPower(DISPLAY_POWER_ALL_OFF,
                                 OutputConfigurator::kSetDisplayPowerNoFlags);
-  EXPECT_EQ(JoinActions(kGrab,
-                        GetFramebufferAction(kSmallModeWidth, kSmallModeHeight,
-                            outputs_[0].crtc, 0).c_str(),
-                        GetCrtcAction(outputs_[0].crtc, 0, 0, 0,
-                            outputs_[0].output).c_str(),
-                        kUngrab, NULL),
-            delegate_->GetActionsAndClear());
+  EXPECT_EQ(
+      JoinActions(
+          kGrab,
+          GetFramebufferAction(
+              kSmallModeWidth, kSmallModeHeight, outputs_[0].crtc, 0).c_str(),
+          GetCrtcAction(outputs_[0].crtc, 0, 0, 0, outputs_[0].output).c_str(),
+          kUngrab,
+          NULL),
+      log_->GetActionsAndClear());
 
   configurator_.SuspendDisplays();
-  EXPECT_EQ(JoinActions(kGrab,
-                        GetFramebufferAction(kSmallModeWidth, kSmallModeHeight,
-                            outputs_[0].crtc, 0).c_str(),
-                        GetCrtcAction(outputs_[0].crtc, 0, 0, kSmallModeId,
-                            outputs_[0].output).c_str(),
-                        kForceDPMS, kUngrab, kSync, NULL),
-            delegate_->GetActionsAndClear());
+  EXPECT_EQ(
+      JoinActions(
+          kGrab,
+          GetFramebufferAction(
+              kSmallModeWidth, kSmallModeHeight, outputs_[0].crtc, 0).c_str(),
+          GetCrtcAction(
+              outputs_[0].crtc, 0, 0, kSmallModeId, outputs_[0].output).c_str(),
+          kForceDPMS,
+          kUngrab,
+          kSync,
+          NULL),
+      log_->GetActionsAndClear());
 
   configurator_.ResumeDisplays();
-  EXPECT_EQ(JoinActions(kGrab,
-                        GetFramebufferAction(kSmallModeWidth, kSmallModeHeight,
-                            outputs_[0].crtc, 0).c_str(),
-                        GetCrtcAction(outputs_[0].crtc, 0, 0, kSmallModeId,
-                            outputs_[0].output).c_str(),
-                        kForceDPMS, kUngrab, NULL),
-            delegate_->GetActionsAndClear());
+  EXPECT_EQ(
+      JoinActions(
+          kGrab,
+          GetFramebufferAction(
+              kSmallModeWidth, kSmallModeHeight, outputs_[0].crtc, 0).c_str(),
+          GetCrtcAction(
+              outputs_[0].crtc, 0, 0, kSmallModeId, outputs_[0].output).c_str(),
+          kForceDPMS,
+          kUngrab,
+          NULL),
+      log_->GetActionsAndClear());
 
   // If a second, external display is connected, the displays shouldn't be
   // powered back on before suspending.
-  state_controller_.set_state(STATE_DUAL_MIRROR);
+  state_controller_.set_state(ui::OUTPUT_STATE_DUAL_MIRROR);
   UpdateOutputs(2, true);
-  EXPECT_EQ(JoinActions(kUpdateXRandR, kGrab,
-                        GetFramebufferAction(kSmallModeWidth, kSmallModeHeight,
-                            outputs_[0].crtc, outputs_[1].crtc).c_str(),
-                        GetCrtcAction(outputs_[0].crtc, 0, 0, kSmallModeId,
-                            outputs_[0].output).c_str(),
-                        GetCrtcAction(outputs_[1].crtc, 0, 0, kSmallModeId,
-                            outputs_[1].output).c_str(),
-                        kUngrab, kProjectingOn, NULL),
-            delegate_->GetActionsAndClear());
+  EXPECT_EQ(
+      JoinActions(
+          kUpdateXRandR,
+          kGrab,
+          GetFramebufferAction(kSmallModeWidth,
+                               kSmallModeHeight,
+                               outputs_[0].crtc,
+                               outputs_[1].crtc).c_str(),
+          GetCrtcAction(
+              outputs_[0].crtc, 0, 0, kSmallModeId, outputs_[0].output).c_str(),
+          GetCrtcAction(
+              outputs_[1].crtc, 0, 0, kSmallModeId, outputs_[1].output).c_str(),
+          kUngrab,
+          NULL),
+      log_->GetActionsAndClear());
 
   configurator_.SetDisplayPower(DISPLAY_POWER_ALL_OFF,
                                 OutputConfigurator::kSetDisplayPowerNoFlags);
-  EXPECT_EQ(JoinActions(kGrab,
-                        GetFramebufferAction(kSmallModeWidth, kSmallModeHeight,
-                            outputs_[0].crtc, outputs_[1].crtc).c_str(),
-                        GetCrtcAction(outputs_[0].crtc, 0, 0, 0,
-                            outputs_[0].output).c_str(),
-                        GetCrtcAction(outputs_[1].crtc, 0, 0, 0,
-                            outputs_[1].output).c_str(),
-                        kUngrab, NULL),
-            delegate_->GetActionsAndClear());
+  EXPECT_EQ(
+      JoinActions(
+          kGrab,
+          GetFramebufferAction(kSmallModeWidth,
+                               kSmallModeHeight,
+                               outputs_[0].crtc,
+                               outputs_[1].crtc).c_str(),
+          GetCrtcAction(outputs_[0].crtc, 0, 0, 0, outputs_[0].output).c_str(),
+          GetCrtcAction(outputs_[1].crtc, 0, 0, 0, outputs_[1].output).c_str(),
+          kUngrab,
+          NULL),
+      log_->GetActionsAndClear());
 
   configurator_.SuspendDisplays();
   EXPECT_EQ(JoinActions(kGrab, kUngrab, kSync, NULL),
-            delegate_->GetActionsAndClear());
+            log_->GetActionsAndClear());
 
   // If a display is disconnected while suspended, the configurator should
   // pick up the change.
   UpdateOutputs(1, false);
   configurator_.ResumeDisplays();
-  EXPECT_EQ(JoinActions(kGrab,
-                        GetFramebufferAction(kSmallModeWidth, kSmallModeHeight,
-                            outputs_[0].crtc, 0).c_str(),
-                        GetCrtcAction(outputs_[0].crtc, 0, 0, 0,
-                            outputs_[0].output).c_str(),
-                        kUngrab, NULL),
-            delegate_->GetActionsAndClear());
+  EXPECT_EQ(
+      JoinActions(
+          kGrab,
+          GetFramebufferAction(
+              kSmallModeWidth, kSmallModeHeight, outputs_[0].crtc, 0).c_str(),
+          GetCrtcAction(outputs_[0].crtc, 0, 0, 0, outputs_[0].output).c_str(),
+          kUngrab,
+          NULL),
+      log_->GetActionsAndClear());
 }
 
 TEST_F(OutputConfiguratorTest, Headless) {
   UpdateOutputs(0, false);
-  EXPECT_EQ(kNoActions, delegate_->GetActionsAndClear());
+  EXPECT_EQ(kNoActions, log_->GetActionsAndClear());
   configurator_.Init(false);
-  EXPECT_EQ(kNoActions, delegate_->GetActionsAndClear());
+  EXPECT_EQ(kNoActions, log_->GetActionsAndClear());
   configurator_.Start(0);
-  EXPECT_EQ(JoinActions(kGrab, kInitXRandR, kForceDPMS, kUngrab,
-                        kProjectingOff, NULL),
-            delegate_->GetActionsAndClear());
+  EXPECT_EQ(JoinActions(kGrab, kInitXRandR, kForceDPMS, kUngrab, NULL),
+            log_->GetActionsAndClear());
 
   // Not much should happen when the display power state is changed while
   // no displays are connected.
   configurator_.SetDisplayPower(DISPLAY_POWER_ALL_OFF,
                                 OutputConfigurator::kSetDisplayPowerNoFlags);
-  EXPECT_EQ(JoinActions(kGrab, kUngrab, NULL), delegate_->GetActionsAndClear());
+  EXPECT_EQ(JoinActions(kGrab, kUngrab, NULL), log_->GetActionsAndClear());
   configurator_.SetDisplayPower(DISPLAY_POWER_ALL_ON,
                                 OutputConfigurator::kSetDisplayPowerNoFlags);
   EXPECT_EQ(JoinActions(kGrab, kForceDPMS, kUngrab, NULL),
-            delegate_->GetActionsAndClear());
+            log_->GetActionsAndClear());
 
   // Connect an external display and check that it's configured correctly.
   outputs_[0] = outputs_[1];
   UpdateOutputs(1, true);
-  EXPECT_EQ(JoinActions(kUpdateXRandR, kGrab,
-                        GetFramebufferAction(kBigModeWidth, kBigModeHeight,
-                            outputs_[0].crtc, 0).c_str(),
-                        GetCrtcAction(outputs_[0].crtc, 0, 0, kBigModeId,
-                            outputs_[0].output).c_str(),
-                        kUngrab, kProjectingOff, NULL),
-            delegate_->GetActionsAndClear());
+  EXPECT_EQ(
+      JoinActions(
+          kUpdateXRandR,
+          kGrab,
+          GetFramebufferAction(
+              kBigModeWidth, kBigModeHeight, outputs_[0].crtc, 0).c_str(),
+          GetCrtcAction(outputs_[0].crtc, 0, 0, kBigModeId, outputs_[0].output)
+              .c_str(),
+          kUngrab,
+          NULL),
+      log_->GetActionsAndClear());
 }
 
 TEST_F(OutputConfiguratorTest, StartWithTwoOutputs) {
   UpdateOutputs(2, false);
-  EXPECT_EQ(kNoActions, delegate_->GetActionsAndClear());
+  EXPECT_EQ(kNoActions, log_->GetActionsAndClear());
   configurator_.Init(false);
-  EXPECT_EQ(kNoActions, delegate_->GetActionsAndClear());
+  EXPECT_EQ(kNoActions, log_->GetActionsAndClear());
 
-  state_controller_.set_state(STATE_DUAL_MIRROR);
+  state_controller_.set_state(ui::OUTPUT_STATE_DUAL_MIRROR);
   configurator_.Start(0);
-  EXPECT_EQ(JoinActions(kGrab, kInitXRandR,
-                        GetFramebufferAction(kSmallModeWidth, kSmallModeHeight,
-                            outputs_[0].crtc, outputs_[1].crtc).c_str(),
-                        GetCrtcAction(outputs_[0].crtc, 0, 0, kSmallModeId,
-                            outputs_[0].output).c_str(),
-                        GetCrtcAction(outputs_[1].crtc, 0, 0, kSmallModeId,
-                            outputs_[1].output).c_str(),
-                        kForceDPMS, kUngrab, kProjectingOn, NULL),
-            delegate_->GetActionsAndClear());
+  EXPECT_EQ(
+      JoinActions(
+          kGrab,
+          kInitXRandR,
+          GetFramebufferAction(kSmallModeWidth,
+                               kSmallModeHeight,
+                               outputs_[0].crtc,
+                               outputs_[1].crtc).c_str(),
+          GetCrtcAction(
+              outputs_[0].crtc, 0, 0, kSmallModeId, outputs_[0].output).c_str(),
+          GetCrtcAction(
+              outputs_[1].crtc, 0, 0, kSmallModeId, outputs_[1].output).c_str(),
+          kForceDPMS,
+          kUngrab,
+          NULL),
+      log_->GetActionsAndClear());
 }
 
 TEST_F(OutputConfiguratorTest, InvalidOutputStates) {
   UpdateOutputs(0, false);
-  EXPECT_EQ(kNoActions, delegate_->GetActionsAndClear());
+  EXPECT_EQ(kNoActions, log_->GetActionsAndClear());
   configurator_.Init(false);
   configurator_.Start(0);
   observer_.Reset();
-  EXPECT_TRUE(configurator_.SetDisplayMode(STATE_HEADLESS));
-  EXPECT_FALSE(configurator_.SetDisplayMode(STATE_SINGLE));
-  EXPECT_FALSE(configurator_.SetDisplayMode(STATE_DUAL_MIRROR));
-  EXPECT_FALSE(configurator_.SetDisplayMode(STATE_DUAL_EXTENDED));
+  EXPECT_TRUE(configurator_.SetDisplayMode(ui::OUTPUT_STATE_HEADLESS));
+  EXPECT_FALSE(configurator_.SetDisplayMode(ui::OUTPUT_STATE_SINGLE));
+  EXPECT_FALSE(configurator_.SetDisplayMode(ui::OUTPUT_STATE_DUAL_MIRROR));
+  EXPECT_FALSE(configurator_.SetDisplayMode(ui::OUTPUT_STATE_DUAL_EXTENDED));
   EXPECT_EQ(1, observer_.num_changes());
   EXPECT_EQ(3, observer_.num_failures());
 
   UpdateOutputs(1, true);
   observer_.Reset();
-  EXPECT_FALSE(configurator_.SetDisplayMode(STATE_HEADLESS));
-  EXPECT_TRUE(configurator_.SetDisplayMode(STATE_SINGLE));
-  EXPECT_FALSE(configurator_.SetDisplayMode(STATE_DUAL_MIRROR));
-  EXPECT_FALSE(configurator_.SetDisplayMode(STATE_DUAL_EXTENDED));
+  EXPECT_FALSE(configurator_.SetDisplayMode(ui::OUTPUT_STATE_HEADLESS));
+  EXPECT_TRUE(configurator_.SetDisplayMode(ui::OUTPUT_STATE_SINGLE));
+  EXPECT_FALSE(configurator_.SetDisplayMode(ui::OUTPUT_STATE_DUAL_MIRROR));
+  EXPECT_FALSE(configurator_.SetDisplayMode(ui::OUTPUT_STATE_DUAL_EXTENDED));
   EXPECT_EQ(1, observer_.num_changes());
   EXPECT_EQ(3, observer_.num_failures());
 
-  state_controller_.set_state(STATE_DUAL_EXTENDED);
+  state_controller_.set_state(ui::OUTPUT_STATE_DUAL_EXTENDED);
   UpdateOutputs(2, true);
   observer_.Reset();
-  EXPECT_FALSE(configurator_.SetDisplayMode(STATE_HEADLESS));
-  EXPECT_FALSE(configurator_.SetDisplayMode(STATE_SINGLE));
-  EXPECT_TRUE(configurator_.SetDisplayMode(STATE_DUAL_MIRROR));
-  EXPECT_TRUE(configurator_.SetDisplayMode(STATE_DUAL_EXTENDED));
+  EXPECT_FALSE(configurator_.SetDisplayMode(ui::OUTPUT_STATE_HEADLESS));
+  EXPECT_FALSE(configurator_.SetDisplayMode(ui::OUTPUT_STATE_SINGLE));
+  EXPECT_TRUE(configurator_.SetDisplayMode(ui::OUTPUT_STATE_DUAL_MIRROR));
+  EXPECT_TRUE(configurator_.SetDisplayMode(ui::OUTPUT_STATE_DUAL_EXTENDED));
   EXPECT_EQ(2, observer_.num_changes());
   EXPECT_EQ(2, observer_.num_failures());
 }
@@ -1006,18 +1105,18 @@ TEST_F(OutputConfiguratorTest, GetOutputStateForDisplaysWithoutId) {
   outputs_[0].has_display_id = false;
   UpdateOutputs(2, false);
   configurator_.Init(false);
-  state_controller_.set_state(STATE_DUAL_MIRROR);
+  state_controller_.set_state(ui::OUTPUT_STATE_DUAL_MIRROR);
   configurator_.Start(0);
-  EXPECT_EQ(STATE_DUAL_EXTENDED, configurator_.output_state());
+  EXPECT_EQ(ui::OUTPUT_STATE_DUAL_EXTENDED, configurator_.output_state());
 }
 
 TEST_F(OutputConfiguratorTest, GetOutputStateForDisplaysWithId) {
   outputs_[0].has_display_id = true;
   UpdateOutputs(2, false);
   configurator_.Init(false);
-  state_controller_.set_state(STATE_DUAL_MIRROR);
+  state_controller_.set_state(ui::OUTPUT_STATE_DUAL_MIRROR);
   configurator_.Start(0);
-  EXPECT_EQ(STATE_DUAL_MIRROR, configurator_.output_state());
+  EXPECT_EQ(ui::OUTPUT_STATE_DUAL_MIRROR, configurator_.output_state());
 }
 
 TEST_F(OutputConfiguratorTest, AvoidUnnecessaryProbes) {
@@ -1027,105 +1126,135 @@ TEST_F(OutputConfiguratorTest, AvoidUnnecessaryProbes) {
   // the output change events don't trigger an additional probe, which can
   // block the UI thread.
   test_api_.SendScreenChangeEvent();
-  EXPECT_EQ(kUpdateXRandR, delegate_->GetActionsAndClear());
+  EXPECT_EQ(kUpdateXRandR, log_->GetActionsAndClear());
 
   test_api_.SendOutputChangeEvent(
       outputs_[0].output, outputs_[0].crtc, outputs_[0].current_mode, true);
   test_api_.SendOutputChangeEvent(
       outputs_[1].output, outputs_[1].crtc, outputs_[1].current_mode, false);
   EXPECT_FALSE(test_api_.TriggerConfigureTimeout());
-  EXPECT_EQ(kNoActions, delegate_->GetActionsAndClear());
+  EXPECT_EQ(kNoActions, log_->GetActionsAndClear());
 
   // Send an event stating that the second output is connected and check
   // that it gets updated.
-  state_controller_.set_state(STATE_DUAL_MIRROR);
+  state_controller_.set_state(ui::OUTPUT_STATE_DUAL_MIRROR);
   UpdateOutputs(2, false);
   test_api_.SendOutputChangeEvent(
       outputs_[1].output, outputs_[1].crtc, outputs_[1].current_mode, true);
   EXPECT_TRUE(test_api_.TriggerConfigureTimeout());
-  EXPECT_EQ(JoinActions(kGrab,
-                        GetFramebufferAction(kSmallModeWidth, kSmallModeHeight,
-                            outputs_[0].crtc, outputs_[1].crtc).c_str(),
-                        GetCrtcAction(outputs_[0].crtc, 0, 0, kSmallModeId,
-                            outputs_[0].output).c_str(),
-                        GetCrtcAction(outputs_[1].crtc, 0, 0, kSmallModeId,
-                            outputs_[1].output).c_str(),
-                        kUngrab, kProjectingOn, NULL),
-            delegate_->GetActionsAndClear());
+  EXPECT_EQ(
+      JoinActions(
+          kGrab,
+          GetFramebufferAction(kSmallModeWidth,
+                               kSmallModeHeight,
+                               outputs_[0].crtc,
+                               outputs_[1].crtc).c_str(),
+          GetCrtcAction(
+              outputs_[0].crtc, 0, 0, kSmallModeId, outputs_[0].output).c_str(),
+          GetCrtcAction(
+              outputs_[1].crtc, 0, 0, kSmallModeId, outputs_[1].output).c_str(),
+          kUngrab,
+          NULL),
+      log_->GetActionsAndClear());
 
   // An event about the second output changing modes should trigger another
   // reconfigure.
   test_api_.SendOutputChangeEvent(
       outputs_[1].output, outputs_[1].crtc, outputs_[1].native_mode, true);
   EXPECT_TRUE(test_api_.TriggerConfigureTimeout());
-  EXPECT_EQ(JoinActions(kGrab,
-                        GetFramebufferAction(kSmallModeWidth, kSmallModeHeight,
-                            outputs_[0].crtc, outputs_[1].crtc).c_str(),
-                        GetCrtcAction(outputs_[0].crtc, 0, 0, kSmallModeId,
-                            outputs_[0].output).c_str(),
-                        GetCrtcAction(outputs_[1].crtc, 0, 0, kSmallModeId,
-                            outputs_[1].output).c_str(),
-                        kUngrab, kProjectingOn, NULL),
-            delegate_->GetActionsAndClear());
+  EXPECT_EQ(
+      JoinActions(
+          kGrab,
+          GetFramebufferAction(kSmallModeWidth,
+                               kSmallModeHeight,
+                               outputs_[0].crtc,
+                               outputs_[1].crtc).c_str(),
+          GetCrtcAction(
+              outputs_[0].crtc, 0, 0, kSmallModeId, outputs_[0].output).c_str(),
+          GetCrtcAction(
+              outputs_[1].crtc, 0, 0, kSmallModeId, outputs_[1].output).c_str(),
+          kUngrab,
+          NULL),
+      log_->GetActionsAndClear());
 
   // Disconnect the second output.
   UpdateOutputs(1, true);
-  EXPECT_EQ(JoinActions(kUpdateXRandR, kGrab,
-                        GetFramebufferAction(kSmallModeWidth, kSmallModeHeight,
-                            outputs_[0].crtc, 0).c_str(),
-                        GetCrtcAction(outputs_[0].crtc, 0, 0, kSmallModeId,
-                            outputs_[0].output).c_str(),
-                        kUngrab, kProjectingOff, NULL),
-            delegate_->GetActionsAndClear());
+  EXPECT_EQ(
+      JoinActions(
+          kUpdateXRandR,
+          kGrab,
+          GetFramebufferAction(
+              kSmallModeWidth, kSmallModeHeight, outputs_[0].crtc, 0).c_str(),
+          GetCrtcAction(
+              outputs_[0].crtc, 0, 0, kSmallModeId, outputs_[0].output).c_str(),
+          kUngrab,
+          NULL),
+      log_->GetActionsAndClear());
 
   // An additional event about the second output being disconnected should
   // be ignored.
   test_api_.SendOutputChangeEvent(
       outputs_[1].output, outputs_[1].crtc, outputs_[1].current_mode, false);
   EXPECT_FALSE(test_api_.TriggerConfigureTimeout());
-  EXPECT_EQ(kNoActions, delegate_->GetActionsAndClear());
+  EXPECT_EQ(kNoActions, log_->GetActionsAndClear());
 
   // Lower the limit for which the delegate will succeed, which should result
   // in the second output sticking with its native mode.
-  delegate_->set_max_configurable_pixels(1);
+  native_display_delegate_->set_max_configurable_pixels(1);
   UpdateOutputs(2, true);
-  EXPECT_EQ(JoinActions(kUpdateXRandR, kGrab,
-                        GetFramebufferAction(kSmallModeWidth, kSmallModeHeight,
-                            outputs_[0].crtc, outputs_[1].crtc).c_str(),
-                        GetCrtcAction(outputs_[0].crtc, 0, 0, kSmallModeId,
-                            outputs_[0].output).c_str(),
-                        GetCrtcAction(outputs_[1].crtc, 0, 0, kSmallModeId,
-                            outputs_[1].output).c_str(),
-                        GetFramebufferAction(kBigModeWidth,
-                            kSmallModeHeight + kBigModeHeight +
-                              OutputConfigurator::kVerticalGap,
-                            outputs_[0].crtc, outputs_[1].crtc).c_str(),
-                        GetCrtcAction(outputs_[0].crtc, 0, 0, kSmallModeId,
-                            outputs_[0].output).c_str(),
-                        GetCrtcAction(outputs_[1].crtc, 0, kSmallModeHeight +
-                            OutputConfigurator::kVerticalGap, kBigModeId,
-                            outputs_[1].output).c_str(),
-                        GetCrtcAction(outputs_[1].crtc, 0, kSmallModeHeight +
-                            OutputConfigurator::kVerticalGap, kSmallModeId,
-                            outputs_[1].output).c_str(),
-                        kUngrab, kProjectingOn, NULL),
-            delegate_->GetActionsAndClear());
+  EXPECT_EQ(
+      JoinActions(
+          kUpdateXRandR,
+          kGrab,
+          GetFramebufferAction(kSmallModeWidth,
+                               kSmallModeHeight,
+                               outputs_[0].crtc,
+                               outputs_[1].crtc).c_str(),
+          GetCrtcAction(
+              outputs_[0].crtc, 0, 0, kSmallModeId, outputs_[0].output).c_str(),
+          GetCrtcAction(
+              outputs_[1].crtc, 0, 0, kSmallModeId, outputs_[1].output).c_str(),
+          GetFramebufferAction(kBigModeWidth,
+                               kSmallModeHeight + kBigModeHeight +
+                                   OutputConfigurator::kVerticalGap,
+                               outputs_[0].crtc,
+                               outputs_[1].crtc).c_str(),
+          GetCrtcAction(
+              outputs_[0].crtc, 0, 0, kSmallModeId, outputs_[0].output).c_str(),
+          GetCrtcAction(outputs_[1].crtc,
+                        0,
+                        kSmallModeHeight + OutputConfigurator::kVerticalGap,
+                        kBigModeId,
+                        outputs_[1].output).c_str(),
+          GetCrtcAction(outputs_[1].crtc,
+                        0,
+                        kSmallModeHeight + OutputConfigurator::kVerticalGap,
+                        kSmallModeId,
+                        outputs_[1].output).c_str(),
+          kUngrab,
+          NULL),
+      log_->GetActionsAndClear());
 
   // A change event reporting a mode change on the second output should
   // trigger another reconfigure.
-  delegate_->set_max_configurable_pixels(0);
+  native_display_delegate_->set_max_configurable_pixels(0);
   test_api_.SendOutputChangeEvent(
       outputs_[1].output, outputs_[1].crtc, outputs_[1].mirror_mode, true);
   EXPECT_TRUE(test_api_.TriggerConfigureTimeout());
-  EXPECT_EQ(JoinActions(kGrab,
-                        GetFramebufferAction(kSmallModeWidth, kSmallModeHeight,
-                            outputs_[0].crtc, outputs_[1].crtc).c_str(),
-                        GetCrtcAction(outputs_[0].crtc, 0, 0, kSmallModeId,
-                            outputs_[0].output).c_str(),
-                        GetCrtcAction(outputs_[1].crtc, 0, 0, kSmallModeId,
-                            outputs_[1].output).c_str(),
-                        kUngrab, kProjectingOn, NULL),
-            delegate_->GetActionsAndClear());
+  EXPECT_EQ(
+      JoinActions(
+          kGrab,
+          GetFramebufferAction(kSmallModeWidth,
+                               kSmallModeHeight,
+                               outputs_[0].crtc,
+                               outputs_[1].crtc).c_str(),
+          GetCrtcAction(
+              outputs_[0].crtc, 0, 0, kSmallModeId, outputs_[0].output).c_str(),
+          GetCrtcAction(
+              outputs_[1].crtc, 0, 0, kSmallModeId, outputs_[1].output).c_str(),
+          kUngrab,
+          NULL),
+      log_->GetActionsAndClear());
 }
 
 TEST_F(OutputConfiguratorTest, UpdateCachedOutputsEvenAfterFailure) {
@@ -1137,7 +1266,7 @@ TEST_F(OutputConfiguratorTest, UpdateCachedOutputsEvenAfterFailure) {
 
   // After connecting a second output, check that it shows up in
   // |cached_outputs_| even if an invalid state is requested.
-  state_controller_.set_state(STATE_SINGLE);
+  state_controller_.set_state(ui::OUTPUT_STATE_SINGLE);
   UpdateOutputs(2, true);
   cached = &test_api_.cached_outputs();
   ASSERT_EQ(static_cast<size_t>(2), cached->size());
@@ -1163,21 +1292,27 @@ TEST_F(OutputConfiguratorTest, PanelFitting) {
   // The small mode should be added to the internal output when requesting
   // mirrored mode.
   UpdateOutputs(2, false);
-  state_controller_.set_state(STATE_DUAL_MIRROR);
+  state_controller_.set_state(ui::OUTPUT_STATE_DUAL_MIRROR);
   configurator_.Init(true /* is_panel_fitting_enabled */);
   configurator_.Start(0);
-  EXPECT_EQ(STATE_DUAL_MIRROR, configurator_.output_state());
-  EXPECT_EQ(JoinActions(kGrab, kInitXRandR,
-                        GetAddOutputModeAction(
-                            outputs_[0].output, kSmallModeId).c_str(),
-                        GetFramebufferAction(kSmallModeWidth, kSmallModeHeight,
-                            outputs_[0].crtc, outputs_[1].crtc).c_str(),
-                        GetCrtcAction(outputs_[0].crtc, 0, 0, kSmallModeId,
-                            outputs_[0].output).c_str(),
-                        GetCrtcAction(outputs_[1].crtc, 0, 0, kSmallModeId,
-                            outputs_[1].output).c_str(),
-                        kForceDPMS, kUngrab, kProjectingOn, NULL),
-            delegate_->GetActionsAndClear());
+  EXPECT_EQ(ui::OUTPUT_STATE_DUAL_MIRROR, configurator_.output_state());
+  EXPECT_EQ(
+      JoinActions(
+          kGrab,
+          kInitXRandR,
+          GetAddOutputModeAction(outputs_[0].output, kSmallModeId).c_str(),
+          GetFramebufferAction(kSmallModeWidth,
+                               kSmallModeHeight,
+                               outputs_[0].crtc,
+                               outputs_[1].crtc).c_str(),
+          GetCrtcAction(
+              outputs_[0].crtc, 0, 0, kSmallModeId, outputs_[0].output).c_str(),
+          GetCrtcAction(
+              outputs_[1].crtc, 0, 0, kSmallModeId, outputs_[1].output).c_str(),
+          kForceDPMS,
+          kUngrab,
+          NULL),
+      log_->GetActionsAndClear());
 
   // Both outputs should be using the small mode.
   ASSERT_EQ(1, observer_.num_changes());
@@ -1199,7 +1334,7 @@ TEST_F(OutputConfiguratorTest, PanelFitting) {
 TEST_F(OutputConfiguratorTest, OutputProtection) {
   configurator_.Init(false);
   configurator_.Start(0);
-  EXPECT_NE(kNoActions, delegate_->GetActionsAndClear());
+  EXPECT_NE(kNoActions, log_->GetActionsAndClear());
 
   OutputConfigurator::OutputProtectionClientId id =
       configurator_.RegisterOutputProtectionClient();
@@ -1207,53 +1342,50 @@ TEST_F(OutputConfiguratorTest, OutputProtection) {
 
   // One output.
   UpdateOutputs(1, true);
-  EXPECT_NE(kNoActions, delegate_->GetActionsAndClear());
+  EXPECT_NE(kNoActions, log_->GetActionsAndClear());
   uint32_t link_mask = 0;
   uint32_t protection_mask = 0;
   EXPECT_TRUE(configurator_.QueryOutputProtectionStatus(id,
                                                         outputs_[0].display_id,
                                                         &link_mask,
                                                         &protection_mask));
-  EXPECT_EQ(static_cast<uint32_t>(OUTPUT_TYPE_INTERNAL), link_mask);
-  EXPECT_EQ(static_cast<uint32_t>(OUTPUT_PROTECTION_METHOD_NONE),
+  EXPECT_EQ(static_cast<uint32_t>(ui::OUTPUT_TYPE_INTERNAL), link_mask);
+  EXPECT_EQ(static_cast<uint32_t>(ui::OUTPUT_PROTECTION_METHOD_NONE),
             protection_mask);
-  EXPECT_EQ(kNoActions, delegate_->GetActionsAndClear());
+  EXPECT_EQ(kNoActions, log_->GetActionsAndClear());
 
   // Two outputs.
   UpdateOutputs(2, true);
-  EXPECT_NE(kNoActions, delegate_->GetActionsAndClear());
+  EXPECT_NE(kNoActions, log_->GetActionsAndClear());
   EXPECT_TRUE(configurator_.QueryOutputProtectionStatus(id,
                                                         outputs_[1].display_id,
                                                         &link_mask,
                                                         &protection_mask));
-  EXPECT_EQ(static_cast<uint32_t>(OUTPUT_TYPE_HDMI),
-            link_mask);
-  EXPECT_EQ(static_cast<uint32_t>(OUTPUT_PROTECTION_METHOD_NONE),
+  EXPECT_EQ(static_cast<uint32_t>(ui::OUTPUT_TYPE_HDMI), link_mask);
+  EXPECT_EQ(static_cast<uint32_t>(ui::OUTPUT_PROTECTION_METHOD_NONE),
             protection_mask);
-  EXPECT_EQ(kNoActions, delegate_->GetActionsAndClear());
+  EXPECT_EQ(kNoActions, log_->GetActionsAndClear());
 
-  EXPECT_TRUE(
-      configurator_.EnableOutputProtection(id,
-                                           outputs_[1].display_id,
-                                           OUTPUT_PROTECTION_METHOD_HDCP));
-  EXPECT_EQ(GetSetHDCPStateAction(outputs_[1].output, HDCP_STATE_DESIRED),
-            delegate_->GetActionsAndClear());
+  EXPECT_TRUE(configurator_.EnableOutputProtection(
+      id, outputs_[1].display_id, ui::OUTPUT_PROTECTION_METHOD_HDCP));
+  EXPECT_EQ(GetSetHDCPStateAction(outputs_[1].output, ui::HDCP_STATE_DESIRED),
+            log_->GetActionsAndClear());
 
   // Enable protection.
-  delegate_->set_hdcp_state(HDCP_STATE_ENABLED);
+  native_display_delegate_->set_hdcp_state(ui::HDCP_STATE_ENABLED);
   EXPECT_TRUE(configurator_.QueryOutputProtectionStatus(id,
                                                         outputs_[1].display_id,
                                                         &link_mask,
                                                         &protection_mask));
-  EXPECT_EQ(static_cast<uint32_t>(OUTPUT_TYPE_HDMI), link_mask);
-  EXPECT_EQ(static_cast<uint32_t>(OUTPUT_PROTECTION_METHOD_HDCP),
+  EXPECT_EQ(static_cast<uint32_t>(ui::OUTPUT_TYPE_HDMI), link_mask);
+  EXPECT_EQ(static_cast<uint32_t>(ui::OUTPUT_PROTECTION_METHOD_HDCP),
             protection_mask);
-  EXPECT_EQ(kNoActions, delegate_->GetActionsAndClear());
+  EXPECT_EQ(kNoActions, log_->GetActionsAndClear());
 
   // Protections should be disabled after unregister.
   configurator_.UnregisterOutputProtectionClient(id);
-  EXPECT_EQ(GetSetHDCPStateAction(outputs_[1].output, HDCP_STATE_UNDESIRED),
-            delegate_->GetActionsAndClear());
+  EXPECT_EQ(GetSetHDCPStateAction(outputs_[1].output, ui::HDCP_STATE_UNDESIRED),
+            log_->GetActionsAndClear());
 }
 
 TEST_F(OutputConfiguratorTest, OutputProtectionTwoClients) {
@@ -1266,17 +1398,15 @@ TEST_F(OutputConfiguratorTest, OutputProtectionTwoClients) {
   configurator_.Init(false);
   configurator_.Start(0);
   UpdateOutputs(2, true);
-  EXPECT_NE(kNoActions, delegate_->GetActionsAndClear());
+  EXPECT_NE(kNoActions, log_->GetActionsAndClear());
 
   // Clients never know state enableness for methods that they didn't request.
-  EXPECT_TRUE(
-      configurator_.EnableOutputProtection(client1,
-                                           outputs_[1].display_id,
-                                           OUTPUT_PROTECTION_METHOD_HDCP));
-  EXPECT_EQ(GetSetHDCPStateAction(outputs_[1].output,
-                                  HDCP_STATE_DESIRED).c_str(),
-            delegate_->GetActionsAndClear());
-  delegate_->set_hdcp_state(HDCP_STATE_ENABLED);
+  EXPECT_TRUE(configurator_.EnableOutputProtection(
+      client1, outputs_[1].display_id, ui::OUTPUT_PROTECTION_METHOD_HDCP));
+  EXPECT_EQ(
+      GetSetHDCPStateAction(outputs_[1].output, ui::HDCP_STATE_DESIRED).c_str(),
+      log_->GetActionsAndClear());
+  native_display_delegate_->set_hdcp_state(ui::HDCP_STATE_ENABLED);
 
   uint32_t link_mask = 0;
   uint32_t protection_mask = 0;
@@ -1284,31 +1414,27 @@ TEST_F(OutputConfiguratorTest, OutputProtectionTwoClients) {
                                                         outputs_[1].display_id,
                                                         &link_mask,
                                                         &protection_mask));
-  EXPECT_EQ(static_cast<uint32_t>(OUTPUT_TYPE_HDMI), link_mask);
-  EXPECT_EQ(OUTPUT_PROTECTION_METHOD_HDCP, protection_mask);
+  EXPECT_EQ(static_cast<uint32_t>(ui::OUTPUT_TYPE_HDMI), link_mask);
+  EXPECT_EQ(ui::OUTPUT_PROTECTION_METHOD_HDCP, protection_mask);
 
   EXPECT_TRUE(configurator_.QueryOutputProtectionStatus(client2,
                                                         outputs_[1].display_id,
                                                         &link_mask,
                                                         &protection_mask));
-  EXPECT_EQ(static_cast<uint32_t>(OUTPUT_TYPE_HDMI), link_mask);
-  EXPECT_EQ(OUTPUT_PROTECTION_METHOD_NONE, protection_mask);
+  EXPECT_EQ(static_cast<uint32_t>(ui::OUTPUT_TYPE_HDMI), link_mask);
+  EXPECT_EQ(ui::OUTPUT_PROTECTION_METHOD_NONE, protection_mask);
 
   // Protections will be disabled only if no more clients request them.
-  EXPECT_TRUE(
-      configurator_.EnableOutputProtection(client2,
-                                           outputs_[1].display_id,
-                                           OUTPUT_PROTECTION_METHOD_NONE));
-  EXPECT_EQ(GetSetHDCPStateAction(outputs_[1].output,
-                                  HDCP_STATE_DESIRED).c_str(),
-            delegate_->GetActionsAndClear());
-  EXPECT_TRUE(
-      configurator_.EnableOutputProtection(client1,
-                                           outputs_[1].display_id,
-                                           OUTPUT_PROTECTION_METHOD_NONE));
-  EXPECT_EQ(GetSetHDCPStateAction(outputs_[1].output,
-                                  HDCP_STATE_UNDESIRED).c_str(),
-            delegate_->GetActionsAndClear());
+  EXPECT_TRUE(configurator_.EnableOutputProtection(
+      client2, outputs_[1].display_id, ui::OUTPUT_PROTECTION_METHOD_NONE));
+  EXPECT_EQ(
+      GetSetHDCPStateAction(outputs_[1].output, ui::HDCP_STATE_DESIRED).c_str(),
+      log_->GetActionsAndClear());
+  EXPECT_TRUE(configurator_.EnableOutputProtection(
+      client1, outputs_[1].display_id, ui::OUTPUT_PROTECTION_METHOD_NONE));
+  EXPECT_EQ(GetSetHDCPStateAction(outputs_[1].output, ui::HDCP_STATE_UNDESIRED)
+                .c_str(),
+            log_->GetActionsAndClear());
 }
 
 TEST_F(OutputConfiguratorTest, CTMForMultiScreens) {
@@ -1317,15 +1443,17 @@ TEST_F(OutputConfiguratorTest, CTMForMultiScreens) {
 
   UpdateOutputs(2, false);
   configurator_.Init(false);
-  state_controller_.set_state(STATE_DUAL_EXTENDED);
+  state_controller_.set_state(ui::OUTPUT_STATE_DUAL_EXTENDED);
   configurator_.Start(0);
 
   const int kDualHeight =
       kSmallModeHeight + OutputConfigurator::kVerticalGap + kBigModeHeight;
   const int kDualWidth = kBigModeWidth;
 
-  OutputConfigurator::CoordinateTransformation ctm1 = delegate_->get_ctm(1);
-  OutputConfigurator::CoordinateTransformation ctm2 = delegate_->get_ctm(2);
+  OutputConfigurator::CoordinateTransformation ctm1 =
+      touchscreen_delegate_->GetCTM(1);
+  OutputConfigurator::CoordinateTransformation ctm2 =
+      touchscreen_delegate_->GetCTM(2);
 
   EXPECT_EQ(kSmallModeHeight - 1, round((kDualHeight - 1) * ctm1.y_scale));
   EXPECT_EQ(0, round((kDualHeight - 1) * ctm1.y_offset));
@@ -1372,77 +1500,91 @@ TEST_F(OutputConfiguratorTest, HandleConfigureCrtcFailure) {
 
   configurator_.Init(false);
 
-  // First test simply fails in STATE_SINGLE mode.   This is probably
+  // First test simply fails in OUTPUT_STATE_SINGLE mode.   This is probably
   // unrealistic but the want to make sure any assumptions don't
   // creep in.
-  delegate_->set_max_configurable_pixels(
+  native_display_delegate_->set_max_configurable_pixels(
       outputs_[0].mode_infos[kFirstMode + 2].width *
       outputs_[0].mode_infos[kFirstMode + 2].height);
-  state_controller_.set_state(STATE_SINGLE);
+  state_controller_.set_state(ui::OUTPUT_STATE_SINGLE);
   UpdateOutputs(1, true);
 
-  EXPECT_EQ(JoinActions(kUpdateXRandR, kGrab,
-                        GetFramebufferAction(2560, 1600,
-                            outputs_[0].crtc, 0).c_str(),
-                        GetCrtcAction(outputs_[0].crtc, 0, 0, kFirstMode,
-                            outputs_[0].output).c_str(),
-                        GetCrtcAction(outputs_[0].crtc, 0, 0, kFirstMode + 3,
-                            outputs_[0].output).c_str(),
-                        GetCrtcAction(outputs_[0].crtc, 0, 0, kFirstMode + 2,
-                            outputs_[0].output).c_str(),
-                        kUngrab, kProjectingOff, NULL),
-            delegate_->GetActionsAndClear());
+  EXPECT_EQ(
+      JoinActions(
+          kUpdateXRandR,
+          kGrab,
+          GetFramebufferAction(2560, 1600, outputs_[0].crtc, 0).c_str(),
+          GetCrtcAction(outputs_[0].crtc, 0, 0, kFirstMode, outputs_[0].output)
+              .c_str(),
+          GetCrtcAction(
+              outputs_[0].crtc, 0, 0, kFirstMode + 3, outputs_[0].output)
+              .c_str(),
+          GetCrtcAction(
+              outputs_[0].crtc, 0, 0, kFirstMode + 2, outputs_[0].output)
+              .c_str(),
+          kUngrab,
+          NULL),
+      log_->GetActionsAndClear());
 
   // This test should attempt to configure a mirror mode that will not succeed
   // and should end up in extended mode.
-  delegate_->set_max_configurable_pixels(
+  native_display_delegate_->set_max_configurable_pixels(
       outputs_[0].mode_infos[kFirstMode + 3].width *
       outputs_[0].mode_infos[kFirstMode + 3].height);
-  state_controller_.set_state(STATE_DUAL_MIRROR);
+  state_controller_.set_state(ui::OUTPUT_STATE_DUAL_MIRROR);
   UpdateOutputs(2, true);
 
-  EXPECT_EQ(JoinActions(kUpdateXRandR, kGrab,
-                        GetFramebufferAction(
-                            outputs_[0].mode_infos[kFirstMode].width,
-                            outputs_[0].mode_infos[kFirstMode].height,
-                            outputs_[0].crtc,
-                            outputs_[1].crtc).c_str(),
-                        GetCrtcAction(outputs_[0].crtc,
-                            0, 0, kFirstMode, outputs_[0].output).c_str(),
-                        // First mode tried is expected to fail and it will
-                        // retry wil the 4th mode in the list.
-                        GetCrtcAction(outputs_[0].crtc, 0, 0, kFirstMode + 3,
-                            outputs_[0].output).c_str(),
-                        // Then attempt to configure crtc1 with the first mode.
-                        GetCrtcAction(outputs_[1].crtc, 0, 0, kFirstMode,
-                            outputs_[1].output).c_str(),
-                        GetCrtcAction(outputs_[1].crtc, 0, 0, kFirstMode + 3,
-                            outputs_[1].output).c_str(),
-                        // Since it was requested to go into mirror mode
-                        // and the configured modes were different, it
-                        // should now try and setup a valid configurable
-                        // extended mode.
-                        GetFramebufferAction(
-                            outputs_[0].mode_infos[kFirstMode].width,
-                            outputs_[0].mode_infos[kFirstMode].height +
-                              outputs_[1].mode_infos[kFirstMode].height +
-                              OutputConfigurator::kVerticalGap,
-                            outputs_[0].crtc, outputs_[1].crtc).c_str(),
-                        GetCrtcAction(outputs_[0].crtc, 0, 0, kFirstMode,
-                            outputs_[0].output).c_str(),
-                        GetCrtcAction(outputs_[0].crtc, 0, 0, kFirstMode + 3,
-                            outputs_[0].output).c_str(),
-                        GetCrtcAction(outputs_[1].crtc, 0,
-                            outputs_[1].mode_infos[kFirstMode].height +
-                              OutputConfigurator::kVerticalGap, kFirstMode,
-                            outputs_[1].output).c_str(),
-                        GetCrtcAction(outputs_[1].crtc, 0,
-                            outputs_[1].mode_infos[kFirstMode].height +
-                              OutputConfigurator::kVerticalGap, kFirstMode + 3,
-                            outputs_[1].output).c_str(),
-                        kUngrab, kProjectingOn, NULL),
-            delegate_->GetActionsAndClear());
-
+  EXPECT_EQ(
+      JoinActions(
+          kUpdateXRandR,
+          kGrab,
+          GetFramebufferAction(outputs_[0].mode_infos[kFirstMode].width,
+                               outputs_[0].mode_infos[kFirstMode].height,
+                               outputs_[0].crtc,
+                               outputs_[1].crtc).c_str(),
+          GetCrtcAction(outputs_[0].crtc, 0, 0, kFirstMode, outputs_[0].output)
+              .c_str(),
+          // First mode tried is expected to fail and it will
+          // retry wil the 4th mode in the list.
+          GetCrtcAction(
+              outputs_[0].crtc, 0, 0, kFirstMode + 3, outputs_[0].output)
+              .c_str(),
+          // Then attempt to configure crtc1 with the first mode.
+          GetCrtcAction(outputs_[1].crtc, 0, 0, kFirstMode, outputs_[1].output)
+              .c_str(),
+          GetCrtcAction(
+              outputs_[1].crtc, 0, 0, kFirstMode + 3, outputs_[1].output)
+              .c_str(),
+          // Since it was requested to go into mirror mode
+          // and the configured modes were different, it
+          // should now try and setup a valid configurable
+          // extended mode.
+          GetFramebufferAction(outputs_[0].mode_infos[kFirstMode].width,
+                               outputs_[0].mode_infos[kFirstMode].height +
+                                   outputs_[1].mode_infos[kFirstMode].height +
+                                   OutputConfigurator::kVerticalGap,
+                               outputs_[0].crtc,
+                               outputs_[1].crtc).c_str(),
+          GetCrtcAction(outputs_[0].crtc, 0, 0, kFirstMode, outputs_[0].output)
+              .c_str(),
+          GetCrtcAction(
+              outputs_[0].crtc, 0, 0, kFirstMode + 3, outputs_[0].output)
+              .c_str(),
+          GetCrtcAction(outputs_[1].crtc,
+                        0,
+                        outputs_[1].mode_infos[kFirstMode].height +
+                            OutputConfigurator::kVerticalGap,
+                        kFirstMode,
+                        outputs_[1].output).c_str(),
+          GetCrtcAction(outputs_[1].crtc,
+                        0,
+                        outputs_[1].mode_infos[kFirstMode].height +
+                            OutputConfigurator::kVerticalGap,
+                        kFirstMode + 3,
+                        outputs_[1].output).c_str(),
+          kUngrab,
+          NULL),
+      log_->GetActionsAndClear());
 }
 
 }  // namespace chromeos