Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / ash / test / test_shelf_delegate.cc
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "ash/test/test_shelf_delegate.h"
6
7 #include "ash/shelf/shelf_item_delegate_manager.h"
8 #include "ash/shelf/shelf_model.h"
9 #include "ash/shelf/shelf_util.h"
10 #include "ash/shell.h"
11 #include "ash/test/test_shelf_item_delegate.h"
12 #include "base/strings/string_util.h"
13 #include "base/strings/utf_string_conversions.h"
14 #include "ui/aura/window.h"
15
16 namespace ash {
17 namespace test {
18
19 TestShelfDelegate* TestShelfDelegate::instance_ = NULL;
20
21 TestShelfDelegate::TestShelfDelegate(ShelfModel* model)
22     : model_(model) {
23   CHECK(!instance_);
24   instance_ = this;
25 }
26
27 TestShelfDelegate::~TestShelfDelegate() {
28   instance_ = NULL;
29 }
30
31 void TestShelfDelegate::AddShelfItem(aura::Window* window) {
32   AddShelfItem(window, STATUS_CLOSED);
33 }
34
35 void TestShelfDelegate::AddShelfItem(aura::Window* window,
36                                      ShelfItemStatus status) {
37   ShelfItem item;
38   if (window->type() == ui::wm::WINDOW_TYPE_PANEL)
39     item.type = TYPE_APP_PANEL;
40   else
41     item.type = TYPE_PLATFORM_APP;
42   ShelfID id = model_->next_id();
43   item.status = status;
44   model_->Add(item);
45   window->AddObserver(this);
46
47   ShelfItemDelegateManager* manager =
48       Shell::GetInstance()->shelf_item_delegate_manager();
49   // |manager| owns TestShelfItemDelegate.
50   scoped_ptr<ShelfItemDelegate> delegate(new TestShelfItemDelegate(window));
51   manager->SetShelfItemDelegate(id, delegate.Pass());
52   SetShelfIDForWindow(id, window);
53 }
54
55 void TestShelfDelegate::RemoveShelfItemForWindow(aura::Window* window) {
56   ShelfID id = GetShelfIDForWindow(window);
57   if (id == 0)
58     return;
59   int index = model_->ItemIndexByID(id);
60   DCHECK_NE(-1, index);
61   model_->RemoveItemAt(index);
62   window->RemoveObserver(this);
63 }
64
65 void TestShelfDelegate::OnWindowDestroying(aura::Window* window) {
66   RemoveShelfItemForWindow(window);
67 }
68
69 void TestShelfDelegate::OnWindowHierarchyChanging(
70       const HierarchyChangeParams& params) {
71   // The window may be legitimately reparented while staying open if it moves
72   // to another display or container. If the window does not have a new parent
73   // then remove the shelf item.
74   if (!params.new_parent)
75     RemoveShelfItemForWindow(params.target);
76 }
77
78 void TestShelfDelegate::OnShelfCreated(Shelf* shelf) {
79 }
80
81 void TestShelfDelegate::OnShelfDestroyed(Shelf* shelf) {
82 }
83
84 ShelfID TestShelfDelegate::GetShelfIDForAppID(const std::string& app_id) {
85   return 0;
86 }
87
88 const std::string& TestShelfDelegate::GetAppIDForShelfID(ShelfID id) {
89   return base::EmptyString();
90 }
91
92 void TestShelfDelegate::PinAppWithID(const std::string& app_id) {
93 }
94
95 bool TestShelfDelegate::CanPin() const {
96   return true;
97 }
98
99 bool TestShelfDelegate::IsAppPinned(const std::string& app_id) {
100   return false;
101 }
102
103 void TestShelfDelegate::UnpinAppWithID(const std::string& app_id) {
104 }
105
106 }  // namespace test
107 }  // namespace ash