chromeos: Move //ash/common files into //ash

//ash contains the "Aura Shell" system UI used by Chrome OS. For the
mustash servicification project we initially started moving files into
//ash/mus vs. //ash/aura vs. //ash/common. This allowed us to use DEPS
to ban aura includes. We now support aura on mus all the time, so we
don't need this directory structure.

BUG=690096
TEST=compiles, ash_unittests
[email protected]

Change-Id: I682586877b6c537d2db613664318bbc0365362c6

CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:closure_compilation

Change-Id: I682586877b6c537d2db613664318bbc0365362c6
Reviewed-on: https://chromium-review.googlesource.com/472548
Reviewed-by: James Cook <[email protected]>
Cr-Commit-Position: refs/heads/master@{#463140}
diff --git a/ash/window_user_data_unittest.cc b/ash/window_user_data_unittest.cc
new file mode 100644
index 0000000..a76d9a1
--- /dev/null
+++ b/ash/window_user_data_unittest.cc
@@ -0,0 +1,80 @@
+// Copyright 2016 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 "ash/window_user_data.h"
+
+#include <memory>
+
+#include "ash/test/ash_test.h"
+#include "ash/window_user_data.h"
+#include "base/memory/ptr_util.h"
+#include "ui/aura/window.h"
+#include "ui/compositor/layer_type.h"
+
+namespace ash {
+namespace {
+
+// Class that sets a bool* to true from the destructor. Used to track
+// destruction.
+class Data {
+ public:
+  explicit Data(bool* delete_setter) : delete_setter_(delete_setter) {}
+  ~Data() { *delete_setter_ = true; }
+
+ private:
+  bool* delete_setter_;
+
+  DISALLOW_COPY_AND_ASSIGN(Data);
+};
+
+}  // namespace
+
+using WindowUserDataTest = AshTest;
+
+// Verifies clear() deletes the data associated with a window.
+TEST_F(WindowUserDataTest, ClearDestroys) {
+  WindowUserData<Data> user_data;
+  aura::Window window(nullptr, ui::wm::WINDOW_TYPE_UNKNOWN);
+  window.Init(ui::LAYER_NOT_DRAWN);
+  bool data_deleted = false;
+  user_data.Set(&window, base::MakeUnique<Data>(&data_deleted));
+  EXPECT_FALSE(data_deleted);
+  user_data.clear();
+  EXPECT_TRUE(data_deleted);
+}
+
+// Verifies Set() called with an existing window replaces the existing data.
+TEST_F(WindowUserDataTest, ReplaceDestroys) {
+  WindowUserData<Data> user_data;
+  std::unique_ptr<aura::Window> window(
+      base::MakeUnique<aura::Window>(nullptr, ui::wm::WINDOW_TYPE_UNKNOWN));
+  window->Init(ui::LAYER_NOT_DRAWN);
+  bool data1_deleted = false;
+  user_data.Set(window.get(), base::MakeUnique<Data>(&data1_deleted));
+  EXPECT_FALSE(data1_deleted);
+  bool data2_deleted = false;
+  user_data.Set(window.get(), base::MakeUnique<Data>(&data2_deleted));
+  EXPECT_TRUE(data1_deleted);
+  EXPECT_FALSE(data2_deleted);
+  ASSERT_EQ(1u, user_data.GetWindows().size());
+  EXPECT_EQ(window.get(), *user_data.GetWindows().begin());
+  window.reset();
+  EXPECT_TRUE(data2_deleted);
+  EXPECT_TRUE(user_data.GetWindows().empty());
+}
+
+// Verifies Set() with null deletes existing data.
+TEST_F(WindowUserDataTest, NullClears) {
+  WindowUserData<Data> user_data;
+  aura::Window window(nullptr, ui::wm::WINDOW_TYPE_UNKNOWN);
+  window.Init(ui::LAYER_NOT_DRAWN);
+  bool data1_deleted = false;
+  user_data.Set(&window, base::MakeUnique<Data>(&data1_deleted));
+  EXPECT_FALSE(data1_deleted);
+  user_data.Set(&window, nullptr);
+  EXPECT_TRUE(data1_deleted);
+  EXPECT_TRUE(user_data.GetWindows().empty());
+}
+
+}  // namespace ash