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