15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/callback.h" 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/strings/string_number_conversions.h" 10868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/app/chrome_command_ids.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/bookmarks/bookmark_model_factory.h" 1323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "chrome/browser/chrome_content_browser_client.h" 147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chrome_notification_types.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/bookmarks/bookmark_utils.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_tabstrip.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_window.h" 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/tabs/tab_strip_model.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/views/bookmarks/bookmark_bar_view.h" 2223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "chrome/common/chrome_content_client.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h" 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/test/base/interactive_test_utils.h" 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/test/base/scoped_testing_local_state.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/test_browser_window.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/testing_browser_process.h" 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/testing_profile.h" 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/ui_test_utils.h" 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/view_event_test_base.h" 31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/bookmarks/browser/bookmark_model.h" 32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/bookmarks/test/bookmark_test_helpers.h" 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_service.h" 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/page_navigator.h" 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/test_browser_thread.h" 36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/aura/env.h" 37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/aura/env_observer.h" 38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/aura/window.h" 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/clipboard/clipboard.h" 40868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "ui/base/test/ui_controls.h" 41d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/events/keycodes/keyboard_codes.h" 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/button/menu_button.h" 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/menu/menu_controller.h" 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/menu/menu_item_view.h" 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/menu/submenu_view.h" 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/widget/widget.h" 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using base::ASCIIToUTF16; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserThread; 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::OpenURLParams; 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::PageNavigator; 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::WebContents; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 56cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Waits for a views::Widget dialog to show up. 57cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class DialogWaiter : public aura::EnvObserver, 58cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public views::WidgetObserver { 59cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public: 60cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DialogWaiter() 61cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) : dialog_created_(false), 62cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) dialog_(NULL) { 63cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) aura::Env::GetInstance()->AddObserver(this); 64cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 65cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 66cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual ~DialogWaiter() { 67cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) aura::Env::GetInstance()->RemoveObserver(this); 68cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 69cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 70cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) views::Widget* WaitForDialog() { 71cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (dialog_created_) 72cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return dialog_; 73cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::MessageLoopForUI* loop = base::MessageLoopForUI::current(); 74cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::MessageLoopForUI::ScopedNestableTaskAllower allow_nested(loop); 75cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::RunLoop run_loop; 76cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) quit_closure_ = run_loop.QuitClosure(); 77cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) run_loop.Run(); 78cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return dialog_; 79cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 80cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 81cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) private: 82cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // aura::EnvObserver: 83cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void OnWindowInitialized(aura::Window* window) OVERRIDE { 84cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (dialog_) 85cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return; 86cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) views::Widget* widget = views::Widget::GetWidgetForNativeView(window); 87cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (!widget || !widget->IsDialogBox()) 88cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return; 89cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) dialog_ = widget; 90cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) dialog_->AddObserver(this); 91cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 92cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 93cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // views::WidgetObserver: 94cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void OnWidgetVisibilityChanged(views::Widget* widget, 95cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool visible) OVERRIDE { 96cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) CHECK_EQ(dialog_, widget); 97cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (visible) { 98cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) dialog_created_ = true; 99cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) dialog_->RemoveObserver(this); 100cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (!quit_closure_.is_null()) 101cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) quit_closure_.Run(); 102cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 103cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 104cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 105cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool dialog_created_; 106cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) views::Widget* dialog_; 107cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::Closure quit_closure_; 108cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 109cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(DialogWaiter); 110cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}; 111cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 112cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Waits for a dialog to terminate. 113cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class DialogCloseWaiter : public views::WidgetObserver { 114cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public: 115cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) explicit DialogCloseWaiter(views::Widget* dialog) 116cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) : dialog_closed_(false) { 117cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) dialog->AddObserver(this); 118cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 119cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 120cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual ~DialogCloseWaiter() { 121cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // It is not necessary to remove |this| from the dialog's observer, since 122cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // the dialog is destroyed before this waiter. 123cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 124cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 125cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void WaitForDialogClose() { 126cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (dialog_closed_) 127cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return; 128cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::MessageLoopForUI* loop = base::MessageLoopForUI::current(); 129cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::MessageLoopForUI::ScopedNestableTaskAllower allow_nested(loop); 130cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::RunLoop run_loop; 131cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) quit_closure_ = run_loop.QuitClosure(); 132cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) run_loop.Run(); 133cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 134cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 135cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) private: 136cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // views::WidgetObserver: 137cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void OnWidgetDestroyed(views::Widget* widget) OVERRIDE { 138cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) dialog_closed_ = true; 139cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (!quit_closure_.is_null()) 140cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) quit_closure_.Run(); 141cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 142cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 143cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool dialog_closed_; 144cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::Closure quit_closure_; 145cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 146cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(DialogCloseWaiter); 147cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}; 148cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 149cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Waits for a views::Widget to receive a Tab key. 150cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class TabKeyWaiter : public ui::EventHandler { 151cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public: 152cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) explicit TabKeyWaiter(views::Widget* widget) 153cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) : widget_(widget), 154cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) received_tab_(false) { 155cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) widget_->GetNativeView()->AddPreTargetHandler(this); 156cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 157cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 158cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual ~TabKeyWaiter() { 159cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) widget_->GetNativeView()->RemovePreTargetHandler(this); 160cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 161cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 162cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void WaitForTab() { 163cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (received_tab_) 164cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return; 165cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::MessageLoopForUI* loop = base::MessageLoopForUI::current(); 166cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::MessageLoopForUI::ScopedNestableTaskAllower allow_nested(loop); 167cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::RunLoop run_loop; 168cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) quit_closure_ = run_loop.QuitClosure(); 169cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) run_loop.Run(); 170cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 171cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 172cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) private: 173cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // ui::EventHandler: 174cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void OnKeyEvent(ui::KeyEvent* event) OVERRIDE { 175cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (event->type() == ui::ET_KEY_RELEASED && 176cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) event->key_code() == ui::VKEY_TAB) { 177cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) received_tab_ = true; 178cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (!quit_closure_.is_null()) 179cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) quit_closure_.Run(); 180cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 181cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 182cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 183cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) views::Widget* widget_; 184cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool received_tab_; 185cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::Closure quit_closure_; 186cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 187cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TabKeyWaiter); 188cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}; 189cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MoveMouseAndPress(const gfx::Point& screen_pos, 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::MouseButton button, 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int state, 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Closure& closure) { 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::SendMouseMove(screen_pos.x(), screen_pos.y()); 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::SendMouseEventsNotifyWhenDone(button, state, closure); 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// PageNavigator implementation that records the URL. 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TestingPageNavigator : public PageNavigator { 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual WebContents* OpenURL(const OpenURLParams& params) OVERRIDE { 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url_ = params.url; 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url_; 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 209116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// TODO(erg): Fix bookmark DND tests on linux_aura. crbug.com/163931 210a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#if defined(OS_LINUX) && defined(USE_AURA) 21190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#define MAYBE(x) DISABLED_##x 21290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#else 21390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#define MAYBE(x) x 21490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#endif 21590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Base class for event generating bookmark view tests. These test are intended 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// to exercise View's menus, but that's easier done with BookmarkBarView rather 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// than View's menu itself. 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// SetUp creates a bookmark model with the following structure. 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// All folders are in upper case, all URLs in lower case. 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// F1 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// f1a 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// F11 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// f11a 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// * 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// a 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// b 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// c 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// d 2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// F2 2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// e 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// OTHER 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// oa 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// OF 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ofa 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ofb 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// OF2 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// of2a 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// of2b 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// * if CreateBigMenu returns return true, 100 menu items are created here with 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the names f1-f100. 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Subclasses should be sure and invoke super's implementation of SetUp and 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TearDown. 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BookmarkBarViewEventTestBase : public ViewEventTestBase { 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkBarViewEventTestBase() 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : ViewEventTestBase(), 253a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch model_(NULL) {} 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetUp() OVERRIDE { 25623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) content_client_.reset(new ChromeContentClient); 25723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) content::SetContentClient(content_client_.get()); 25823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) browser_content_client_.reset(new chrome::ChromeContentBrowserClient()); 25923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) content::SetBrowserClientForTesting(browser_content_client_.get()); 26023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 261424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) views::MenuController::TurnOffMenuSelectionHoldForTest(); 2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BookmarkBarView::DisableAnimationsForTesting(true); 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_.reset(new TestingProfile()); 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_->CreateBookmarkModel(true); 2662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) model_ = BookmarkModelFactory::GetForProfile(profile_.get()); 26758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) test::WaitForBookmarkModelToLoad(model_); 2681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci profile_->GetPrefs()->SetBoolean(bookmarks::prefs::kShowBookmarkBar, true); 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Browser::CreateParams native_params(profile_.get(), 271eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch chrome::GetActiveDesktop()); 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser_.reset( 2732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::CreateBrowserWithTestWindowForParams(&native_params)); 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) local_state_.reset(new ScopedTestingLocalState( 276c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TestingBrowserProcess::GetGlobal())); 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model_->ClearStore(); 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bb_view_.reset(new BookmarkBarView(browser_.get(), NULL)); 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bb_view_->set_owned_by_client(); 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bb_view_->SetPageNavigator(&navigator_); 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddTestData(CreateBigMenu()); 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Calculate the preferred size so that one button doesn't fit, which 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // triggers the overflow button to appear. 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // BookmarkBarView::Layout does nothing if the parent is NULL and 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // GetPreferredSize hard codes a width of 1. For that reason we add the 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // BookmarkBarView to a dumby view as the parent. 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This code looks a bit hacky, but I've written it so that it shouldn't 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // be dependant upon any of the layout code in BookmarkBarView. Instead 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // we brute force search for a size that triggers the overflow button. 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::View tmp_parent; 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tmp_parent.AddChildView(bb_view_.get()); 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bb_view_pref_ = bb_view_->GetPreferredSize(); 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bb_view_pref_.set_width(1000); 301f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) views::LabelButton* button = GetBookmarkButton(6); 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while (button->visible()) { 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bb_view_pref_.set_width(bb_view_pref_.width() - 25); 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bb_view_->SetBounds(0, 0, bb_view_pref_.width(), bb_view_pref_.height()); 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bb_view_->Layout(); 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tmp_parent.RemoveChildView(bb_view_.get()); 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ViewEventTestBase::SetUp(); 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void TearDown() { 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Destroy everything, then run the message loop to ensure we delete all 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Tasks and fully shut down. 3162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser_->tab_strip_model()->CloseAllTabs(); 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bb_view_.reset(); 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser_.reset(); 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_.reset(); 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Run the message loop to ensure we delete allTasks and fully shut down. 322cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::MessageLoopForUI* loop = base::MessageLoopForUI::current(); 323cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::MessageLoopForUI::ScopedNestableTaskAllower allow_nested(loop); 324cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::RunLoop run_loop; 325cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) loop->PostTask(FROM_HERE, run_loop.QuitClosure()); 326cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) run_loop.Run(); 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ViewEventTestBase::TearDown(); 3292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BookmarkBarView::DisableAnimationsForTesting(false); 33023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 33123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) browser_content_client_.reset(); 33223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) content_client_.reset(); 33323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) content::SetContentClient(NULL); 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 3372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual views::View* CreateContentsView() OVERRIDE { 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return bb_view_.get(); 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 341cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual gfx::Size GetPreferredSize() const OVERRIDE { return bb_view_pref_; } 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 343f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) views::LabelButton* GetBookmarkButton(int view_index) { 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return bb_view_->GetBookmarkButton(view_index); 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // See comment above class description for what this does. 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool CreateBigMenu() { return false; } 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkModel* model_; 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<BookmarkBarView> bb_view_; 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestingPageNavigator navigator_; 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void AddTestData(bool big_menu) { 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const BookmarkNode* bb_node = model_->bookmark_bar_node(); 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string test_base = "file:///c:/tmp/"; 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const BookmarkNode* f1 = model_->AddFolder(bb_node, 0, ASCIIToUTF16("F1")); 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model_->AddURL(f1, 0, ASCIIToUTF16("f1a"), GURL(test_base + "f1a")); 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const BookmarkNode* f11 = model_->AddFolder(f1, 1, ASCIIToUTF16("F11")); 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model_->AddURL(f11, 0, ASCIIToUTF16("f11a"), GURL(test_base + "f11a")); 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (big_menu) { 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int i = 1; i <= 100; ++i) { 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model_->AddURL(f1, i + 1, ASCIIToUTF16("f") + base::IntToString16(i), 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL(test_base + "f" + base::IntToString(i))); 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model_->AddURL(bb_node, 1, ASCIIToUTF16("a"), GURL(test_base + "a")); 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model_->AddURL(bb_node, 2, ASCIIToUTF16("b"), GURL(test_base + "b")); 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model_->AddURL(bb_node, 3, ASCIIToUTF16("c"), GURL(test_base + "c")); 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model_->AddURL(bb_node, 4, ASCIIToUTF16("d"), GURL(test_base + "d")); 3722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) model_->AddFolder(bb_node, 5, ASCIIToUTF16("F2")); 3732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) model_->AddURL(bb_node, 6, ASCIIToUTF16("d"), GURL(test_base + "d")); 3742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model_->AddURL(model_->other_node(), 0, ASCIIToUTF16("oa"), 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL(test_base + "oa")); 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const BookmarkNode* of = model_->AddFolder(model_->other_node(), 1, 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("OF")); 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model_->AddURL(of, 0, ASCIIToUTF16("ofa"), GURL(test_base + "ofa")); 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model_->AddURL(of, 1, ASCIIToUTF16("ofb"), GURL(test_base + "ofb")); 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const BookmarkNode* of2 = model_->AddFolder(model_->other_node(), 2, 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("OF2")); 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model_->AddURL(of2, 0, ASCIIToUTF16("of2a"), GURL(test_base + "of2a")); 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model_->AddURL(of2, 1, ASCIIToUTF16("of2b"), GURL(test_base + "of2b")); 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Size bb_view_pref_; 38823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) scoped_ptr<ChromeContentClient> content_client_; 38923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) scoped_ptr<chrome::ChromeContentBrowserClient> browser_content_client_; 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<TestingProfile> profile_; 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<Browser> browser_; 392c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<ScopedTestingLocalState> local_state_; 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Clicks on first menu, makes sure button is depressed. Moves mouse to first 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// child, clicks it and makes sure a navigation occurs. 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BookmarkBarViewTest1 : public BookmarkBarViewEventTestBase { 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 3992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void DoTestOnMessageLoop() OVERRIDE { 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Move the mouse to the first folder on the bookmark bar and press the 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // mouse. 402f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) views::LabelButton* button = GetBookmarkButton(0); 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress(button, ui_controls::LEFT, 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::DOWN | ui_controls::UP, 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest1::Step2)); 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step2() { 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Menu should be showing. 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetMenu(); 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu != NULL); 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()->IsShowing()); 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Button should be depressed. 416f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) views::LabelButton* button = GetBookmarkButton(0); 4172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(button->state() == views::CustomButton::STATE_PRESSED); 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Click on the 2nd menu item (A URL). 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()); 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu_to_select = 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu->GetSubmenu()->GetMenuItemAt(0); 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress(menu_to_select, ui_controls::LEFT, 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::DOWN | ui_controls::UP, 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest1::Step3)); 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step3() { 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should have navigated to URL f1a. 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(navigator_.url_ == 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model_->bookmark_bar_node()->GetChild(0)->GetChild(0)->url()); 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure button is no longer pushed. 435f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) views::LabelButton* button = GetBookmarkButton(0); 4362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(button->state() == views::CustomButton::STATE_NORMAL); 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetMenu(); 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu == NULL || !menu->GetSubmenu()->IsShowing()); 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Done(); 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)VIEW_TEST(BookmarkBarViewTest1, Basic) 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Brings up menu, clicks on empty space and make sure menu hides. 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BookmarkBarViewTest2 : public BookmarkBarViewEventTestBase { 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 4502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void DoTestOnMessageLoop() OVERRIDE { 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Move the mouse to the first folder on the bookmark bar and press the 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // mouse. 453f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) views::LabelButton* button = GetBookmarkButton(0); 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress(button, ui_controls::LEFT, 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::DOWN | ui_controls::UP, 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest2::Step2)); 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step2() { 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Menu should be showing. 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetMenu(); 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu != NULL && menu->GetSubmenu()->IsShowing()); 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Click on 0x0, which should trigger closing menu. 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // NOTE: this code assume there is a left margin, which is currently 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // true. If that changes, this code will need to find another empty space 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // to press the mouse on. 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Point mouse_loc; 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::View::ConvertPointToScreen(bb_view_.get(), &mouse_loc); 4712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui_controls::SendMouseMoveNotifyWhenDone(0, 0, 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest2::Step3)); 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step3() { 4762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // As the click is on the desktop the hook never sees the up, so we only 4772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // wait on the down. We still send the up though else the system thinks 4782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // the mouse is still down. 4792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui_controls::SendMouseEventsNotifyWhenDone( 4802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui_controls::LEFT, ui_controls::DOWN, 4812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest2::Step4)); 4822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui_controls::SendMouseEvents(ui_controls::LEFT, ui_controls::UP); 4832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 4842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void Step4() { 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The menu shouldn't be showing. 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetMenu(); 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu == NULL || !menu->GetSubmenu()->IsShowing()); 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure button is no longer pushed. 491f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) views::LabelButton* button = GetBookmarkButton(0); 4922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(button->state() == views::CustomButton::STATE_NORMAL); 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Done(); 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4981e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && defined(USE_AURA) 4991e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// TODO(erg): linux_aura bringup: http://crbug.com/163931 5001e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#define MAYBE_HideOnDesktopClick DISABLED_HideOnDesktopClick 5011e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#else 5021e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#define MAYBE_HideOnDesktopClick HideOnDesktopClick 5031e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#endif 5041e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5051e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)VIEW_TEST(BookmarkBarViewTest2, MAYBE_HideOnDesktopClick) 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Brings up menu. Moves over child to make sure submenu appears, moves over 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// another child and make sure next menu appears. 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BookmarkBarViewTest3 : public BookmarkBarViewEventTestBase { 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 5112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void DoTestOnMessageLoop() OVERRIDE { 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Move the mouse to the first folder on the bookmark bar and press the 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // mouse. 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuButton* button = bb_view_->other_bookmarked_button(); 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress(button, ui_controls::LEFT, 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::DOWN | ui_controls::UP, 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest3::Step2)); 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step2() { 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Menu should be showing. 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetMenu(); 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu != NULL); 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()->IsShowing()); 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* child_menu = 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu->GetSubmenu()->GetMenuItemAt(1); 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(child_menu != NULL); 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Click on second child, which has a submenu. 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress(child_menu, ui_controls::LEFT, 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::DOWN | ui_controls::UP, 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest3::Step3)); 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step3() { 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure sub menu is showing. 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetMenu(); 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu); 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* child_menu = 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu->GetSubmenu()->GetMenuItemAt(1); 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(child_menu->GetSubmenu() != NULL); 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(child_menu->GetSubmenu()->IsShowing()); 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Click on third child, which has a submenu too. 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) child_menu = menu->GetSubmenu()->GetMenuItemAt(2); 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(child_menu != NULL); 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress(child_menu, ui_controls::LEFT, 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::DOWN | ui_controls::UP, 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest3::Step4)); 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step4() { 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure sub menu we first clicked isn't showing. 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetMenu(); 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* child_menu = 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu->GetSubmenu()->GetMenuItemAt(1); 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(child_menu->GetSubmenu() != NULL); 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(child_menu->GetSubmenu()->IsShowing()); 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // And submenu we last clicked is showing. 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) child_menu = menu->GetSubmenu()->GetMenuItemAt(2); 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(child_menu != NULL); 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(child_menu->GetSubmenu()->IsShowing()); 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Nothing should have been selected. 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GURL(), navigator_.url_); 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Hide menu. 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu->GetMenuController()->CancelAll(); 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Done(); 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)VIEW_TEST(BookmarkBarViewTest3, Submenus) 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Observer that posts task upon the context menu creation. 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This is necessary for Linux as the context menu has to check 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the clipboard, which invokes the event loop. 5825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class BookmarkContextMenuNotificationObserver 5835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) : public content::NotificationObserver { 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 5855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) explicit BookmarkContextMenuNotificationObserver(const base::Closure& task) 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : task_(task) { 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registrar_.Add(this, 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NOTIFICATION_BOOKMARK_CONTEXT_MENU_SHOWN, 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Observe(int type, 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::NotificationSource& source, 5942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const content::NotificationDetails& details) OVERRIDE { 595b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) base::MessageLoop::current()->PostTask(FROM_HERE, task_); 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets the task that is posted when the context menu is shown. 5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_task(const base::Closure& task) { task_ = task; } 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationRegistrar registrar_; 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Closure task_; 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(BookmarkContextMenuNotificationObserver); 6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests context menus by way of opening a context menu for a bookmark, 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// then right clicking to get context menu and selecting the first menu item 6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// (open). 6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BookmarkBarViewTest4 : public BookmarkBarViewEventTestBase { 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkBarViewTest4() 614c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) : observer_(CreateEventTask(this, &BookmarkBarViewTest4::Step3)) { 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 6182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void DoTestOnMessageLoop() OVERRIDE { 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Move the mouse to the first folder on the bookmark bar and press the 6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // mouse. 621f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) views::LabelButton* button = bb_view_->other_bookmarked_button(); 6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress(button, ui_controls::LEFT, 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::DOWN | ui_controls::UP, 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest4::Step2)); 6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step2() { 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Menu should be showing. 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetMenu(); 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu != NULL); 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()->IsShowing()); 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* child_menu = 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu->GetSubmenu()->GetMenuItemAt(0); 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(child_menu != NULL); 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Right click on the first child to get its context menu. 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress(child_menu, ui_controls::RIGHT, 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::DOWN | ui_controls::UP, base::Closure()); 6415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Step3 will be invoked by BookmarkContextMenuNotificationObserver. 6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step3() { 6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure the context menu is showing. 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetContextMenu(); 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu != NULL); 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()); 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()->IsShowing()); 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Select the first menu item (open). 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress( 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu->GetSubmenu()->GetMenuItemAt(0), 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::LEFT, ui_controls::DOWN | ui_controls::UP, 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest4::Step4)); 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step4() { 6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(navigator_.url_, model_->other_node()->GetChild(0)->url()); 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Done(); 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) BookmarkContextMenuNotificationObserver observer_; 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)VIEW_TEST(BookmarkBarViewTest4, ContextMenus) 6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests drag and drop within the same menu. 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BookmarkBarViewTest5 : public BookmarkBarViewEventTestBase { 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 6712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void DoTestOnMessageLoop() OVERRIDE { 6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url_dragging_ = 6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model_->bookmark_bar_node()->GetChild(0)->GetChild(0)->url(); 6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Move the mouse to the first folder on the bookmark bar and press the 6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // mouse. 677f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) views::LabelButton* button = GetBookmarkButton(0); 6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress(button, ui_controls::LEFT, 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::DOWN | ui_controls::UP, 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest5::Step2)); 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step2() { 6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Menu should be showing. 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetMenu(); 6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu != NULL); 6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()->IsShowing()); 6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* child_menu = 6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu->GetSubmenu()->GetMenuItemAt(0); 6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(child_menu != NULL); 6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Move mouse to center of menu and press button. 6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress(child_menu, ui_controls::LEFT, 6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::DOWN, 6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest5::Step3)); 6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step3() { 7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* target_menu = 7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bb_view_->GetMenu()->GetSubmenu()->GetMenuItemAt(1); 7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Point loc(1, target_menu->height() - 1); 7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::View::ConvertPointToScreen(target_menu, &loc); 7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Start a drag. 7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::SendMouseMoveNotifyWhenDone(loc.x() + 10, loc.y(), 7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest5::Step4)); 7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // See comment above this method as to why we do this. 7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScheduleMouseMoveInBackground(loc.x(), loc.y()); 7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step4() { 7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Drop the item so that it's now the second item. 7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* target_menu = 7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bb_view_->GetMenu()->GetSubmenu()->GetMenuItemAt(1); 7182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Point loc(1, target_menu->height() - 2); 7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::View::ConvertPointToScreen(target_menu, &loc); 7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::SendMouseMove(loc.x(), loc.y()); 7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::SendMouseEventsNotifyWhenDone(ui_controls::LEFT, 7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::UP, 7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest5::Step5)); 7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step5() { 7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url = model_->bookmark_bar_node()->GetChild(0)->GetChild(1)->url(); 7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(url_dragging_, url); 7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Done(); 7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url_dragging_; 7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#if !defined(OS_WIN) // flaky http://crbug.com/400578 73790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)VIEW_TEST(BookmarkBarViewTest5, MAYBE(DND)) 7386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#endif 7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests holding mouse down on overflow button, dragging such that menu pops up 7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// then selecting an item. 7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BookmarkBarViewTest6 : public BookmarkBarViewEventTestBase { 7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 7442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void DoTestOnMessageLoop() OVERRIDE { 7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Press the mouse button on the overflow button. Don't release it though. 746f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) views::LabelButton* button = bb_view_->overflow_button(); 7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress(button, ui_controls::LEFT, 7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::DOWN, CreateEventTask(this, &BookmarkBarViewTest6::Step2)); 7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step2() { 7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Menu should be showing. 7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetMenu(); 7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu != NULL); 7565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()->IsShowing()); 7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* child_menu = 7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu->GetSubmenu()->GetMenuItemAt(0); 7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(child_menu != NULL); 7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Move mouse to center of menu and release mouse. 7635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress(child_menu, ui_controls::LEFT, 7645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::UP, CreateEventTask(this, &BookmarkBarViewTest6::Step3)); 7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step3() { 7685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(navigator_.url_ == 7692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) model_->bookmark_bar_node()->GetChild(6)->url()); 7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Done(); 7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url_dragging_; 7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 7755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)VIEW_TEST(BookmarkBarViewTest6, OpenMenuOnClickAndHold) 7775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests drag and drop to different menu. 7795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BookmarkBarViewTest7 : public BookmarkBarViewEventTestBase { 7805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 7812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void DoTestOnMessageLoop() OVERRIDE { 7825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url_dragging_ = 7835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model_->bookmark_bar_node()->GetChild(0)->GetChild(0)->url(); 7845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Move the mouse to the first folder on the bookmark bar and press the 7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // mouse. 787f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) views::LabelButton* button = GetBookmarkButton(0); 7885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress(button, ui_controls::LEFT, 7895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::DOWN | ui_controls::UP, 7905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest7::Step2)); 7915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 7945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step2() { 7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Menu should be showing. 7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetMenu(); 7975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu != NULL); 7985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()->IsShowing()); 7995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* child_menu = 8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu->GetSubmenu()->GetMenuItemAt(0); 8025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(child_menu != NULL); 8035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Move mouse to center of menu and press button. 8055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress(child_menu, ui_controls::LEFT, 8065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::DOWN, 8075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest7::Step3)); 8085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step3() { 8115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Drag over other button. 812f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) views::LabelButton* other_button = 8135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bb_view_->other_bookmarked_button(); 8145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Point loc(other_button->width() / 2, other_button->height() / 2); 8155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::View::ConvertPointToScreen(other_button, &loc); 8165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(USE_AURA) 8185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO: fix this. Aura requires an additional mouse event to trigger drag 8195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // and drop checking state. 8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::SendMouseMoveNotifyWhenDone(loc.x() + 10, loc.y(), 8215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&BookmarkBarViewTest7::Step3A, this)); 8225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 8235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Start a drag. 8245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::SendMouseMoveNotifyWhenDone(loc.x() + 10, loc.y(), 8255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&BookmarkBarViewTest7::Step4, this)); 8265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // See comment above this method as to why we do this. 8285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScheduleMouseMoveInBackground(loc.x(), loc.y()); 8295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 8305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step3A() { 8335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Drag over other button. 834f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) views::LabelButton* other_button = 8355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bb_view_->other_bookmarked_button(); 8365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Point loc(other_button->width() / 2, other_button->height() / 2); 8375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::View::ConvertPointToScreen(other_button, &loc); 8385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::SendMouseMoveNotifyWhenDone(loc.x(), loc.y(), 8405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&BookmarkBarViewTest7::Step4, this)); 8415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step4() { 8445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* drop_menu = bb_view_->GetDropMenu(); 8455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(drop_menu != NULL); 8465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(drop_menu->GetSubmenu()->IsShowing()); 8475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* target_menu = 8495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) drop_menu->GetSubmenu()->GetMenuItemAt(0); 8505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Point loc(1, 1); 8515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::View::ConvertPointToScreen(target_menu, &loc); 8522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui_controls::SendMouseMoveNotifyWhenDone(loc.x(), loc.y(), 8535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest7::Step5)); 8545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step5() { 8572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui_controls::SendMouseEventsNotifyWhenDone( 8582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui_controls::LEFT, ui_controls::UP, 8592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest7::Step6)); 8602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 8612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void Step6() { 8635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(model_->other_node()->GetChild(0)->url() == url_dragging_); 8645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Done(); 8655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url_dragging_; 8685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 8695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#if !defined(OS_WIN) 8712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// This test passes locally (on aero and non-aero) but fails on the trybots and 8722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// buildbot. 8732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// http://crbug.com/154081 87490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)VIEW_TEST(BookmarkBarViewTest7, MAYBE(DNDToDifferentMenu)) 8755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 8765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Drags from one menu to next so that original menu closes, then back to 8785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// original menu. 8795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BookmarkBarViewTest8 : public BookmarkBarViewEventTestBase { 8805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 8812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void DoTestOnMessageLoop() OVERRIDE { 8825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url_dragging_ = 8835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model_->bookmark_bar_node()->GetChild(0)->GetChild(0)->url(); 8845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Move the mouse to the first folder on the bookmark bar and press the 8865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // mouse. 887f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) views::LabelButton* button = GetBookmarkButton(0); 8885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress(button, ui_controls::LEFT, 8895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::DOWN | ui_controls::UP, 8905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest8::Step2)); 8915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 8945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step2() { 8955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Menu should be showing. 8965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetMenu(); 8975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu != NULL); 8985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()->IsShowing()); 8995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* child_menu = 9015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu->GetSubmenu()->GetMenuItemAt(0); 9025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(child_menu != NULL); 9035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Move mouse to center of menu and press button. 9055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress(child_menu, ui_controls::LEFT, 9065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::DOWN, 9075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest8::Step3)); 9085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step3() { 9115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Drag over other button. 912f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) views::LabelButton* other_button = 9135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bb_view_->other_bookmarked_button(); 9145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Point loc(other_button->width() / 2, other_button->height() / 2); 9155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::View::ConvertPointToScreen(other_button, &loc); 9165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Start a drag. 9185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(USE_AURA) 9195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO: fix this. Aura requires an additional mouse event to trigger drag 9205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // and drop checking state. 9215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::SendMouseMoveNotifyWhenDone(loc.x() + 10, loc.y(), 9225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&BookmarkBarViewTest8::Step3A, this)); 9235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 9245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::SendMouseMoveNotifyWhenDone(loc.x() + 10, loc.y(), 9255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&BookmarkBarViewTest8::Step4, this)); 9265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // See comment above this method as to why we do this. 9275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScheduleMouseMoveInBackground(loc.x(), loc.y()); 9285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 9295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step3A() { 9325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Drag over other button. 933f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) views::LabelButton* other_button = 9345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bb_view_->other_bookmarked_button(); 9355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Point loc(other_button->width() / 2, other_button->height() / 2); 9365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::View::ConvertPointToScreen(other_button, &loc); 9375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::SendMouseMoveNotifyWhenDone(loc.x() + 10, loc.y(), 9395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&BookmarkBarViewTest8::Step4, this)); 9405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step4() { 9435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* drop_menu = bb_view_->GetDropMenu(); 9445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(drop_menu != NULL); 9455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(drop_menu->GetSubmenu()->IsShowing()); 9465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Now drag back over first menu. 948f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) views::LabelButton* button = GetBookmarkButton(0); 9495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Point loc(button->width() / 2, button->height() / 2); 9505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::View::ConvertPointToScreen(button, &loc); 9515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::SendMouseMoveNotifyWhenDone(loc.x(), loc.y(), 9525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&BookmarkBarViewTest8::Step5, this)); 9535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step5() { 9565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Drop on folder F11. 9575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* drop_menu = bb_view_->GetDropMenu(); 9585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(drop_menu != NULL); 9595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(drop_menu->GetSubmenu()->IsShowing()); 9605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* target_menu = 9625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) drop_menu->GetSubmenu()->GetMenuItemAt(1); 9635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress( 9645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) target_menu, ui_controls::LEFT, ui_controls::UP, 9655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest8::Step6)); 9665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step6() { 9695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure drop was processed. 9705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL final_url = model_->bookmark_bar_node()->GetChild(0)->GetChild(0)-> 9715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetChild(1)->url(); 9725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(final_url == url_dragging_); 9735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Done(); 9745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url_dragging_; 9775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 9785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#if !defined(OS_WIN) 9802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// This test passes locally (on aero and non-aero) but fails on the trybots and 9812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// buildbot. 9822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// http://crbug.com/154081 98390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)VIEW_TEST(BookmarkBarViewTest8, MAYBE(DNDBackToOriginatingMenu)) 9845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 9855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Moves the mouse over the scroll button and makes sure we get scrolling. 9875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BookmarkBarViewTest9 : public BookmarkBarViewEventTestBase { 9885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 9892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool CreateBigMenu() OVERRIDE { return true; } 9905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void DoTestOnMessageLoop() OVERRIDE { 9925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Move the mouse to the first folder on the bookmark bar and press the 9935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // mouse. 994f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) views::LabelButton* button = GetBookmarkButton(0); 9955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress(button, ui_controls::LEFT, 9965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::DOWN | ui_controls::UP, 9975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest9::Step2)); 9985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 10015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step2() { 10025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Menu should be showing. 10035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetMenu(); 10045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu != NULL); 10055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()->IsShowing()); 10065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) first_menu_ = menu->GetSubmenu()->GetMenuItemAt(0); 10085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Point menu_loc; 10095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::View::ConvertPointToScreen(first_menu_, &menu_loc); 10105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) start_y_ = menu_loc.y(); 10115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Move the mouse over the scroll button. 10135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::View* scroll_container = menu->GetSubmenu()->parent(); 10145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(scroll_container != NULL); 10155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scroll_container = scroll_container->parent(); 10165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(scroll_container != NULL); 10175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::View* scroll_down_button = scroll_container->child_at(1); 10185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(scroll_down_button); 10195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Point loc(scroll_down_button->width() / 2, 10205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scroll_down_button->height() / 2); 10215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::View::ConvertPointToScreen(scroll_down_button, &loc); 10225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // On linux, the sending one location isn't enough. 10245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::SendMouseMove(loc.x() - 1 , loc.y() - 1); 10255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::SendMouseMoveNotifyWhenDone( 10265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) loc.x(), loc.y(), CreateEventTask(this, &BookmarkBarViewTest9::Step3)); 10275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step3() { 1030b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) base::MessageLoop::current()->PostDelayedTask( 1031b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) FROM_HERE, 10325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&BookmarkBarViewTest9::Step4, this), 10335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::TimeDelta::FromMilliseconds(200)); 10345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step4() { 10375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Point menu_loc; 10385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::View::ConvertPointToScreen(first_menu_, &menu_loc); 10395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NE(start_y_, menu_loc.y()); 10405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Hide menu. 10425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bb_view_->GetMenu()->GetMenuController()->CancelAll(); 10435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // On linux, Cancelling menu will call Quit on the message loop, 10455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // which can interfere with Done. We need to run Done in the 10465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // next execution loop. 1047b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) base::MessageLoop::current()->PostTask( 1048b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) FROM_HERE, base::Bind(&ViewEventTestBase::Done, this)); 10495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int start_y_; 10525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* first_menu_; 10535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 10545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)VIEW_TEST(BookmarkBarViewTest9, ScrollButtonScrolls) 10565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests up/down/left/enter key messages. 10585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BookmarkBarViewTest10 : public BookmarkBarViewEventTestBase { 10595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 10602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void DoTestOnMessageLoop() OVERRIDE { 10615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Move the mouse to the first folder on the bookmark bar and press the 10625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // mouse. 1063f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) views::LabelButton* button = GetBookmarkButton(0); 10645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress(button, ui_controls::LEFT, 10655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::DOWN | ui_controls::UP, 10665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest10::Step2)); 1067b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) base::MessageLoop::current()->RunUntilIdle(); 10685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 10715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step2() { 10725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Menu should be showing. 10735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetMenu(); 10745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu != NULL); 10755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()->IsShowing()); 10765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Send a down event, which should select the first item. 10785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::SendKeyPressNotifyWhenDone( 10792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) window_->GetNativeWindow(), ui::VKEY_DOWN, false, false, false, false, 10805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest10::Step3)); 10815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step3() { 10845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure menu is showing and item is selected. 10855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetMenu(); 10865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu != NULL); 10875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()->IsShowing()); 10885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()->GetMenuItemAt(0)->IsSelected()); 10895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Send a key down event, which should select the next item. 10915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::SendKeyPressNotifyWhenDone( 10922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) window_->GetNativeWindow(), ui::VKEY_DOWN, false, false, false, false, 10935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest10::Step4)); 10945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step4() { 10975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetMenu(); 10985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu != NULL); 10995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()->IsShowing()); 11005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(menu->GetSubmenu()->GetMenuItemAt(0)->IsSelected()); 11015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()->GetMenuItemAt(1)->IsSelected()); 11025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Send a right arrow to force the menu to open. 11045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::SendKeyPressNotifyWhenDone( 11052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) window_->GetNativeWindow(), ui::VKEY_RIGHT, false, false, false, false, 11065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest10::Step5)); 11075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step5() { 11105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure the submenu is showing. 11115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetMenu(); 11125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu != NULL); 11135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()->IsShowing()); 11145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* submenu = menu->GetSubmenu()->GetMenuItemAt(1); 11155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(submenu->IsSelected()); 11165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(submenu->GetSubmenu()); 11175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(submenu->GetSubmenu()->IsShowing()); 11185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Send a left arrow to close the submenu. 11205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::SendKeyPressNotifyWhenDone( 11212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) window_->GetNativeWindow(), ui::VKEY_LEFT, false, false, false, false, 11225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest10::Step6)); 11235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step6() { 11265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure the submenu is showing. 11275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetMenu(); 11285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu != NULL); 11295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()->IsShowing()); 11305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* submenu = menu->GetSubmenu()->GetMenuItemAt(1); 11315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(submenu->IsSelected()); 11325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(!submenu->GetSubmenu() || !submenu->GetSubmenu()->IsShowing()); 11335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Send a down arrow to wrap back to f1a 11355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::SendKeyPressNotifyWhenDone( 11362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) window_->GetNativeWindow(), ui::VKEY_DOWN, false, false, false, false, 11375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest10::Step7)); 11385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step7() { 11415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure menu is showing and item is selected. 11425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetMenu(); 11435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu != NULL); 11445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()->IsShowing()); 11455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()->GetMenuItemAt(0)->IsSelected()); 11465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Send enter, which should select the item. 11485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::SendKeyPressNotifyWhenDone( 11492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) window_->GetNativeWindow(), ui::VKEY_RETURN, false, false, false, false, 11505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest10::Step8)); 11515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step8() { 11545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE( 11555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model_->bookmark_bar_node()->GetChild(0)->GetChild(0)->url() == 11565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) navigator_.url_); 11575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Done(); 11585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 11605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#if defined(USE_OZONE) 11626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// ozone bringup - http://crbug.com/401304 11636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#define MAYBE_KeyEvents DISABLED_KeyEvents 11646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#else 11656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#define MAYBE_KeyEvents KeyEvents 11666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#endif 11676e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 11686e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)VIEW_TEST(BookmarkBarViewTest10, MAYBE_KeyEvents) 11695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Make sure the menu closes with the following sequence: show menu, show 11715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// context menu, close context menu (via escape), then click else where. This 11725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// effectively verifies we maintain mouse capture after the context menu is 11735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// hidden. 11745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BookmarkBarViewTest11 : public BookmarkBarViewEventTestBase { 11755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 11765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkBarViewTest11() 1177c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) : observer_(CreateEventTask(this, &BookmarkBarViewTest11::Step3)) { 11785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 11812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void DoTestOnMessageLoop() OVERRIDE { 11825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Move the mouse to the first folder on the bookmark bar and press the 11835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // mouse. 1184f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) views::LabelButton* button = bb_view_->other_bookmarked_button(); 11855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress(button, ui_controls::LEFT, 11865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::DOWN | ui_controls::UP, 11875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest11::Step2)); 11885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 11915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step2() { 11925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Menu should be showing. 11935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetMenu(); 11945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu != NULL); 11955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()->IsShowing()); 11965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* child_menu = 11985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu->GetSubmenu()->GetMenuItemAt(0); 11995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(child_menu != NULL); 12005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Right click on the first child to get its context menu. 12025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress(child_menu, ui_controls::RIGHT, 12035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::DOWN | ui_controls::UP, base::Closure()); 12045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Step3 will be invoked by BookmarkContextMenuNotificationObserver. 12055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step3() { 12085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Send escape so that the context menu hides. 12095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::SendKeyPressNotifyWhenDone( 12102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) window_->GetNativeWindow(), ui::VKEY_ESCAPE, false, false, false, false, 12115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest11::Step4)); 12125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step4() { 12155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure the context menu is no longer showing. 12165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetContextMenu(); 12175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(!menu || !menu->GetSubmenu() || 12185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !menu->GetSubmenu()->IsShowing()); 12195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // But the menu should be showing. 12215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu = bb_view_->GetMenu(); 12225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu && menu->GetSubmenu() && menu->GetSubmenu()->IsShowing()); 12235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Now click on empty space. 12255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Point mouse_loc; 12265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::View::ConvertPointToScreen(bb_view_.get(), &mouse_loc); 12275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::SendMouseMove(mouse_loc.x(), mouse_loc.y()); 12285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::SendMouseEventsNotifyWhenDone( 12295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::LEFT, ui_controls::UP | ui_controls::DOWN, 12305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest11::Step5)); 12315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step5() { 12345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure the menu is not showing. 12355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetMenu(); 12365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(!menu || !menu->GetSubmenu() || 12375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !menu->GetSubmenu()->IsShowing()); 12385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Done(); 12395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) BookmarkContextMenuNotificationObserver observer_; 12425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 12435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12441e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && defined(USE_AURA) 12451e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// TODO(erg): linux_aura bringup: http://crbug.com/163931 12461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#define MAYBE_CloseMenuAfterClosingContextMenu \ 12471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) DISABLED_CloseMenuAfterClosingContextMenu 12486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#elif defined(USE_OZONE) 12496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// ozone bringup - http://crbug.com/401304 12506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#define MAYBE_CloseMenuAfterClosingContextMenu \ 12516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) DISABLED_CloseMenuAfterClosingContextMenu 12521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#else 12531e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#define MAYBE_CloseMenuAfterClosingContextMenu CloseMenuAfterClosingContextMenu 12541e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#endif 12551e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 12561e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)VIEW_TEST(BookmarkBarViewTest11, MAYBE_CloseMenuAfterClosingContextMenu) 12575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests showing a modal dialog from a context menu. 12595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BookmarkBarViewTest12 : public BookmarkBarViewEventTestBase { 12605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 12612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void DoTestOnMessageLoop() OVERRIDE { 12625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Open up the other folder. 1263f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) views::LabelButton* button = bb_view_->other_bookmarked_button(); 12645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress(button, ui_controls::LEFT, 12655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::DOWN | ui_controls::UP, 12665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest12::Step2)); 12672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::num_bookmark_urls_before_prompting = 1; 12685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~BookmarkBarViewTest12() { 12712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::num_bookmark_urls_before_prompting = 15; 12725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 12755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step2() { 12765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Menu should be showing. 12775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetMenu(); 12785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu != NULL); 12795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()->IsShowing()); 12805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* child_menu = 12825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu->GetSubmenu()->GetMenuItemAt(1); 12835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(child_menu != NULL); 12845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Right click on the second child (a folder) to get its context menu. 12865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress(child_menu, ui_controls::RIGHT, 12875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::DOWN | ui_controls::UP, 12885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest12::Step3)); 12895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step3() { 12925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure the context menu is showing. 12935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetContextMenu(); 12945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu && menu->GetSubmenu() && menu->GetSubmenu()->IsShowing()); 12955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Select the first item in the context menu (open all). 12975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* child_menu = 12985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu->GetSubmenu()->GetMenuItemAt(0); 12995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(child_menu != NULL); 13005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1301cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Click and wait until the dialog box appears. 1302cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) scoped_ptr<DialogWaiter> dialog_waiter(new DialogWaiter()); 1303cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress( 1304cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) child_menu, 1305cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ui_controls::LEFT, 1306cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ui_controls::DOWN | ui_controls::UP, 1307cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::Bind( 1308cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) &BookmarkBarViewTest12::Step4, this, base::Passed(&dialog_waiter))); 13095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1311cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void Step4(scoped_ptr<DialogWaiter> waiter) { 1312cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) views::Widget* dialog = waiter->WaitForDialog(); 1313cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) waiter.reset(); 1314cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1315cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Press tab to give focus to the cancel button. Wait until the widget 1316cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // receives the tab key. 1317cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) TabKeyWaiter tab_waiter(dialog); 13182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui_controls::SendKeyPress( 13192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) window_->GetNativeWindow(), ui::VKEY_TAB, false, false, false, false); 1320cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) tab_waiter.WaitForTab(); 13215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // For some reason return isn't processed correctly unless we delay. 1323b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) base::MessageLoop::current()->PostDelayedTask( 1324b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) FROM_HERE, 1325cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::Bind( 1326cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) &BookmarkBarViewTest12::Step5, this, base::Unretained(dialog)), 13275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::TimeDelta::FromSeconds(1)); 13285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1330cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void Step5(views::Widget* dialog) { 1331cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DialogCloseWaiter waiter(dialog); 13325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // And press enter so that the cancel button is selected. 1333cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ui_controls::SendKeyPressNotifyWhenDone(window_->GetNativeWindow(), 1334cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ui::VKEY_RETURN, 1335cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) false, 1336cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) false, 1337cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) false, 1338cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) false, 1339cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::Closure()); 1340cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) waiter.WaitForDialogClose(); 13415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Done(); 13425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 13445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13451e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && defined(USE_AURA) 13461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// TODO(erg): linux_aura bringup: http://crbug.com/163931 13471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#define MAYBE_CloseWithModalDialog DISABLED_CloseWithModalDialog 13481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#else 13491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#define MAYBE_CloseWithModalDialog CloseWithModalDialog 13501e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#endif 13511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 13521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)VIEW_TEST(BookmarkBarViewTest12, MAYBE_CloseWithModalDialog) 13535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests clicking on the separator of a context menu (this is for coverage of 13555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// bug 17862). 13565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BookmarkBarViewTest13 : public BookmarkBarViewEventTestBase { 13575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 13585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkBarViewTest13() 1359c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) : observer_(CreateEventTask(this, &BookmarkBarViewTest13::Step3)) { 13605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 13632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void DoTestOnMessageLoop() OVERRIDE { 13645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Move the mouse to the first folder on the bookmark bar and press the 13655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // mouse. 1366f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) views::LabelButton* button = bb_view_->other_bookmarked_button(); 13675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress(button, ui_controls::LEFT, 13685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::DOWN | ui_controls::UP, 13695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest13::Step2)); 13705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 13735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step2() { 13745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Menu should be showing. 13755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetMenu(); 13765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu != NULL); 13775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()->IsShowing()); 13785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* child_menu = 13805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu->GetSubmenu()->GetMenuItemAt(0); 13815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(child_menu != NULL); 13825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Right click on the first child to get its context menu. 13845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress(child_menu, ui_controls::RIGHT, 13855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::DOWN | ui_controls::UP, base::Closure()); 13865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Step3 will be invoked by BookmarkContextMenuNotificationObserver. 13875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step3() { 13905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure the context menu is showing. 13915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetContextMenu(); 13925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu != NULL); 13935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()); 13945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()->IsShowing()); 13955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Find the first separator. 13975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::SubmenuView* submenu = menu->GetSubmenu(); 13985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::View* separator_view = NULL; 13995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int i = 0; i < submenu->child_count(); ++i) { 14005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (submenu->child_at(i)->id() != views::MenuItemView::kMenuItemViewID) { 14015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) separator_view = submenu->child_at(i); 14025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 14035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 14045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 14055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(separator_view); 14065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Click on the separator. Clicking on the separator shouldn't visually 14085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // change anything. 14095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress(separator_view, 14105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::LEFT, ui_controls::DOWN | ui_controls::UP, 14115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest13::Step4)); 14125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 14135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step4() { 14155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The context menu should still be showing. 14165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetContextMenu(); 14175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu != NULL); 14185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()); 14195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()->IsShowing()); 14205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Select the first context menu item. 14225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress( 14235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu->GetSubmenu()->GetMenuItemAt(0), 14245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::LEFT, 14255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::DOWN | ui_controls::UP, 14265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest13::Step5)); 14275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 14285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step5() { 14305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Done(); 14315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 14325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) BookmarkContextMenuNotificationObserver observer_; 14345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 14355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)VIEW_TEST(BookmarkBarViewTest13, ClickOnContextMenuSeparator) 14375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Makes sure right clicking on a folder on the bookmark bar doesn't result in 14395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// both a context menu and showing the menu. 14405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BookmarkBarViewTest14 : public BookmarkBarViewEventTestBase { 14415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 14425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkBarViewTest14() 1443c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) : observer_(CreateEventTask(this, &BookmarkBarViewTest14::Step2)) { 14445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 14455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 14472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void DoTestOnMessageLoop() OVERRIDE { 14485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Move the mouse to the first folder on the bookmark bar and press the 14495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // right mouse button. 1450f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) views::LabelButton* button = GetBookmarkButton(0); 14515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress(button, ui_controls::RIGHT, 14525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::DOWN | ui_controls::UP, base::Closure()); 14535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Step2 will be invoked by BookmarkContextMenuNotificationObserver. 14545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 14555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 14575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step2() { 14595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Menu should NOT be showing. 14605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetMenu(); 14615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu == NULL); 14625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Send escape so that the context menu hides. 14645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::SendKeyPressNotifyWhenDone( 14652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) window_->GetNativeWindow(), ui::VKEY_ESCAPE, false, false, false, false, 14665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest14::Step3)); 14675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 14685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step3() { 14705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Done(); 14715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 14725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) BookmarkContextMenuNotificationObserver observer_; 14745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 14755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14766e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#if defined(USE_OZONE) 14776e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// ozone bringup - http://crbug.com/401304 14786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#define MAYBE_ContextMenus2 DISABLED_ContextMenus2 14796e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#else 14806e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#define MAYBE_ContextMenus2 ContextMenus2 14816e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#endif 14826e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 14836e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)VIEW_TEST(BookmarkBarViewTest14, MAYBE_ContextMenus2) 14845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Makes sure deleting from the context menu keeps the bookmark menu showing. 14865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BookmarkBarViewTest15 : public BookmarkBarViewEventTestBase { 14875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 14885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkBarViewTest15() 14895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : deleted_menu_id_(0), 1490c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) observer_(CreateEventTask(this, &BookmarkBarViewTest15::Step3)) { 14915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 14925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 14942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void DoTestOnMessageLoop() OVERRIDE { 14955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Show the other bookmarks. 1496f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) views::LabelButton* button = bb_view_->other_bookmarked_button(); 14975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress(button, ui_controls::LEFT, 14985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::DOWN | ui_controls::UP, 14995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest15::Step2)); 15005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 15035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step2() { 15045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Menu should be showing. 15055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetMenu(); 15065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu != NULL); 15075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()->IsShowing()); 15085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* child_menu = 15105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu->GetSubmenu()->GetMenuItemAt(1); 15115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(child_menu != NULL); 15125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) deleted_menu_id_ = child_menu->GetCommand(); 15145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Right click on the second child to get its context menu. 15165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress(child_menu, ui_controls::RIGHT, 15175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::DOWN | ui_controls::UP, base::Closure()); 15185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Step3 will be invoked by BookmarkContextMenuNotificationObserver. 15195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step3() { 15225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure the context menu is showing. 15235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetContextMenu(); 15245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu != NULL); 15255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()); 15265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()->IsShowing()); 15275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* delete_menu = 15295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu->GetMenuItemByID(IDC_BOOKMARK_BAR_REMOVE); 15305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(delete_menu); 15315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Click on the delete button. 15335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress(delete_menu, 15345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::LEFT, ui_controls::DOWN | ui_controls::UP, 15355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest15::Step4)); 15365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step4() { 15395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The context menu should not be showing. 15405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* context_menu = bb_view_->GetContextMenu(); 15415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(context_menu == NULL); 15425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // But the menu should be showing. 15445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetMenu(); 15455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu != NULL); 15465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()->IsShowing()); 15475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // And the deleted_menu_id_ should have been removed. 15495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetMenuItemByID(deleted_menu_id_) == NULL); 15505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bb_view_->GetMenu()->GetMenuController()->CancelAll(); 15525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Done(); 15545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int deleted_menu_id_; 15575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) BookmarkContextMenuNotificationObserver observer_; 15585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 15595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)VIEW_TEST(BookmarkBarViewTest15, MenuStaysVisibleAfterDelete) 15615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that we don't crash or get stuck if the parent of a menu is closed. 15635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BookmarkBarViewTest16 : public BookmarkBarViewEventTestBase { 15645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 15652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void DoTestOnMessageLoop() OVERRIDE { 15665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Move the mouse to the first folder on the bookmark bar and press the 15675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // mouse. 1568f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) views::LabelButton* button = GetBookmarkButton(0); 15695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress(button, ui_controls::LEFT, 15705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::DOWN | ui_controls::UP, 15715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest16::Step2)); 15725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 15755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step2() { 15765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Menu should be showing. 15775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetMenu(); 15785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu != NULL); 15795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()->IsShowing()); 15805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Button should be depressed. 1582f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) views::LabelButton* button = GetBookmarkButton(0); 15832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(button->state() == views::CustomButton::STATE_PRESSED); 15845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Close the window. 15865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window_->Close(); 15875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window_ = NULL; 15885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1589b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) base::MessageLoop::current()->PostTask( 15905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FROM_HERE, CreateEventTask(this, &BookmarkBarViewTest16::Done)); 15915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 15935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15941e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#if defined(OS_LINUX) && !defined(OS_CHROMEOS) 15951e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// TODO(erg): linux_aura bringup: http://crbug.com/163931 15961e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#define MAYBE_DeleteMenu DISABLED_DeleteMenu 15971e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#else 15981e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#define MAYBE_DeleteMenu DeleteMenu 15991e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#endif 16001e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 16011e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)VIEW_TEST(BookmarkBarViewTest16, MAYBE_DeleteMenu) 16025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Makes sure right clicking on an item while a context menu is already showing 16045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// doesn't crash and works. 16055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BookmarkBarViewTest17 : public BookmarkBarViewEventTestBase { 16065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 16075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkBarViewTest17() 1608c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) : observer_(CreateEventTask(this, &BookmarkBarViewTest17::Step3)) { 16095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 16105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 16122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void DoTestOnMessageLoop() OVERRIDE { 16135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Move the mouse to the other folder on the bookmark bar and press the 16145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // left mouse button. 1615f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) views::LabelButton* button = bb_view_->other_bookmarked_button(); 16165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress(button, ui_controls::LEFT, 16175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::DOWN | ui_controls::UP, 16185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest17::Step2)); 16195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 16205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 16225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step2() { 16235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Menu should be showing. 16245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetMenu(); 16255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu != NULL); 16265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()->IsShowing()); 16275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Right click on the second item to show its context menu. 16295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* child_menu = menu->GetSubmenu()->GetMenuItemAt(2); 16305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(child_menu != NULL); 16315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress(child_menu, ui_controls::RIGHT, 16325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::DOWN | ui_controls::UP, base::Closure()); 16335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Step3 will be invoked by BookmarkContextMenuNotificationObserver. 16345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 16355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step3() { 16375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure the context menu is showing. 16385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* context_menu = bb_view_->GetContextMenu(); 16395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(context_menu != NULL); 16405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(context_menu->GetSubmenu()); 16415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(context_menu->GetSubmenu()->IsShowing()); 16425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Right click on the first menu item to trigger its context menu. 16445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetMenu(); 16455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu != NULL); 16465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()->IsShowing()); 16475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* child_menu = menu->GetSubmenu()->GetMenuItemAt(1); 16485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(child_menu != NULL); 16495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The context menu and child_menu can be overlapped, calculate the 16515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // non-intersected Rect of the child menu and click on its center to make 16525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // sure the click is always on the child menu. 16535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect context_rect = context_menu->GetSubmenu()->GetBoundsInScreen(); 16545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect child_menu_rect = child_menu->GetBoundsInScreen(); 16555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect clickable_rect = 16565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::SubtractRects(child_menu_rect, context_rect); 16575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(clickable_rect.IsEmpty()); 16585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer_.set_task(CreateEventTask(this, &BookmarkBarViewTest17::Step4)); 16595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MoveMouseAndPress(clickable_rect.CenterPoint(), ui_controls::RIGHT, 16605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::DOWN | ui_controls::UP, base::Closure()); 16615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Step4 will be invoked by BookmarkContextMenuNotificationObserver. 16625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 16635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step4() { 16655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The context menu should still be showing. 16665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* context_menu = bb_view_->GetContextMenu(); 16675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(context_menu != NULL); 16685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // And the menu should be showing. 16705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetMenu(); 16715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu != NULL); 16725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()->IsShowing()); 16735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bb_view_->GetMenu()->GetMenuController()->CancelAll(); 16755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Done(); 16775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 16785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) BookmarkContextMenuNotificationObserver observer_; 16805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 16815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16821e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && defined(USE_AURA) 16831e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// TODO(erg): linux_aura bringup: http://crbug.com/163931 16841e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#define MAYBE_ContextMenus3 DISABLED_ContextMenus3 16856e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#elif defined(USE_OZONE) 16866e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// ozone bringup - http://crbug.com/401304 16876e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#define MAYBE_ContextMenus3 DISABLED_ContextMenus3 16886e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#elif defined(OS_WIN) // http://crbug.com/128961 16896e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#define MAYBE_ContextMenus3 DISABLED_ContextMenus3 16901e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#else 16911e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#define MAYBE_ContextMenus3 ContextMenus3 16921e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#endif 16931e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 16941e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)VIEW_TEST(BookmarkBarViewTest17, MAYBE_ContextMenus3) 16955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Verifies sibling menus works. Clicks on the 'other bookmarks' folder, then 16975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// moves the mouse over the first item on the bookmark bar and makes sure the 16985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// menu appears. 16995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BookmarkBarViewTest18 : public BookmarkBarViewEventTestBase { 17005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 17012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void DoTestOnMessageLoop() OVERRIDE { 17025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Move the mouse to the other folder on the bookmark bar and press the 17035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // left mouse button. 1704f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) views::LabelButton* button = bb_view_->other_bookmarked_button(); 17055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress(button, ui_controls::LEFT, 17065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::DOWN | ui_controls::UP, 17075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest18::Step2)); 17085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 17115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step2() { 17125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Menu should be showing. 17135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetMenu(); 17145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu != NULL); 17155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()->IsShowing()); 17165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Move the mouse to the first folder on the bookmark bar 1718f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) views::LabelButton* button = GetBookmarkButton(0); 17195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Point button_center(button->width() / 2, button->height() / 2); 17205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::View::ConvertPointToScreen(button, &button_center); 17215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::SendMouseMoveNotifyWhenDone( 17225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) button_center.x(), button_center.y(), 17235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest18::Step3)); 17245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step3() { 17275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure the menu is showing. 17285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetMenu(); 17295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu != NULL); 17305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()->IsShowing()); 17315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The menu for the first folder should be in the pressed state (since the 17332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // menu is showing for it). 17342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(views::CustomButton::STATE_PRESSED, 17352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetBookmarkButton(0)->state()); 17362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 17375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu->GetMenuController()->CancelAll(); 17385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Done(); 17405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 17425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17431e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#if defined(OS_LINUX) && !defined(OS_CHROMEOS) 17441e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// TODO(erg): linux_aura bringup: http://crbug.com/163931 17451e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#define MAYBE_BookmarkBarViewTest18_SiblingMenu \ 17461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) DISABLED_BookmarkBarViewTest18_SiblingMenu 17471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#else 17481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#define MAYBE_BookmarkBarViewTest18_SiblingMenu \ 17491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) BookmarkBarViewTest18_SiblingMenu 17501e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#endif 17511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 17521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)VIEW_TEST(BookmarkBarViewTest18, MAYBE_BookmarkBarViewTest18_SiblingMenu) 17535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Verifies mousing over an already open sibling menu doesn't prematurely cancel 17555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the menu. 17565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BookmarkBarViewTest19 : public BookmarkBarViewEventTestBase { 17575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 17582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void DoTestOnMessageLoop() OVERRIDE { 17595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Move the mouse to the other folder on the bookmark bar and press the 17605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // left mouse button. 1761f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) views::LabelButton* button = bb_view_->other_bookmarked_button(); 17625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress(button, ui_controls::LEFT, 17635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::DOWN | ui_controls::UP, 17645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest19::Step2)); 17655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 17685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step2() { 17695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Menu should be showing. 17705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetMenu(); 17715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu != NULL); 17725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()->IsShowing()); 17735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Click on the first folder. 17755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* child_menu = menu->GetSubmenu()->GetMenuItemAt(1); 17765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(child_menu != NULL); 17775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress( 17785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) child_menu, ui_controls::LEFT, 17795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::DOWN | ui_controls::UP, 17805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest19::Step3)); 17815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step3() { 17845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure the menu is showing. 17855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetMenu(); 17865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu != NULL); 17875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()->IsShowing()); 17885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Move the mouse back to the other bookmark button. 1790f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) views::LabelButton* button = bb_view_->other_bookmarked_button(); 17915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Point button_center(button->width() / 2, button->height() / 2); 17925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::View::ConvertPointToScreen(button, &button_center); 17935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::SendMouseMoveNotifyWhenDone( 17945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) button_center.x() + 1, button_center.y() + 1, 17955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest19::Step4)); 17965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step4() { 17995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Menu should be showing. 18005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetMenu(); 18015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu != NULL); 18025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()->IsShowing()); 18035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Click on the first folder. 18055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* child_menu = menu->GetSubmenu()->GetMenuItemAt(1); 18065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(child_menu != NULL); 18075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress( 18085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) child_menu, 18095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::LEFT, 18105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::DOWN | ui_controls::UP, 18115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest19::Step5)); 18125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 18135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step5() { 18155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure the menu is showing. 18165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetMenu(); 18175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu != NULL); 18185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()->IsShowing()); 18195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu->GetMenuController()->CancelAll(); 18215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Done(); 18235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 18245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 18255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)VIEW_TEST(BookmarkBarViewTest19, BookmarkBarViewTest19_SiblingMenu) 18272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 18282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Verify that when clicking a mouse button outside a context menu, 18292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// the context menu is dismissed *and* the underlying view receives 18302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// the the mouse event (due to event reposting). 18312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class BookmarkBarViewTest20 : public BookmarkBarViewEventTestBase { 18322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 18332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BookmarkBarViewTest20() : test_view_(new TestViewForMenuExit) {} 18342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 18352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 18362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void DoTestOnMessageLoop() OVERRIDE { 18372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Add |test_view_| next to |bb_view_|. 18382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::View* parent = bb_view_->parent(); 18392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::View* container_view = new ContainerViewForMenuExit; 18402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) container_view->AddChildView(bb_view_.get()); 18412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) container_view->AddChildView(test_view_); 18422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) parent->AddChildView(container_view); 18432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) parent->Layout(); 18442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 18452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(test_view_->press_count(), 0); 18462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 18472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Move the mouse to the Test View and press the left mouse button. 18482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress( 18492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) test_view_, ui_controls::LEFT, ui_controls::DOWN | ui_controls::UP, 18502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest20::Step1)); 18512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 18522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 18532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 18542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void Step1() { 18552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(test_view_->press_count(), 1); 18562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(bb_view_->GetMenu() == NULL); 18572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 18582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Move the mouse to the first folder on the bookmark bar and press the 18592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // left mouse button. 1860f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) views::LabelButton* button = GetBookmarkButton(0); 18612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress( 18622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) button, ui_controls::LEFT, ui_controls::DOWN | ui_controls::UP, 18632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest20::Step2)); 18642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 18652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 18662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void Step2() { 18672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(test_view_->press_count(), 1); 18682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::MenuItemView* menu = bb_view_->GetMenu(); 18692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(menu != NULL); 18702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()->IsShowing()); 18712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 18722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Move the mouse to the Test View and press the left mouse button. 18732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The context menu will consume the event and exit. Thereafter, 18742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // the event is reposted and delivered to the Test View which 18752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // increases its press-count. 18762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress( 18772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) test_view_, ui_controls::LEFT, ui_controls::DOWN | ui_controls::UP, 18782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest20::Step3)); 18792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 18802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 18812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void Step3() { 18822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(test_view_->press_count(), 2); 18832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(bb_view_->GetMenu() == NULL); 18842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Done(); 18852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 18862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 18872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) class ContainerViewForMenuExit : public views::View { 18882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 18892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ContainerViewForMenuExit() { 18902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 18912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 18922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void Layout() OVERRIDE { 18932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK_EQ(2, child_count()); 18942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::View* bb_view = child_at(0); 18952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::View* test_view = child_at(1); 18962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const int width = bb_view->width(); 18972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const int height = bb_view->height(); 18982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bb_view->SetBounds(0,0, width - 22, height); 18992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) test_view->SetBounds(width - 20, 0, 20, height); 19002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 19012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 19032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(ContainerViewForMenuExit); 19052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 19062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) class TestViewForMenuExit : public views::View { 19082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 19092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestViewForMenuExit() : press_count_(0) { 19102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 19112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool OnMousePressed(const ui::MouseEvent& event) OVERRIDE { 19122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ++press_count_; 19132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 19142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 19152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int press_count() const { return press_count_; } 19162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 19182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int press_count_; 19192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TestViewForMenuExit); 19212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 19222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestViewForMenuExit* test_view_; 19242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 19252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#if defined(OS_LINUX) && !defined(OS_CHROMEOS) 19271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// TODO(erg): linux_aura bringup: http://crbug.com/163931 19281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#define MAYBE_ContextMenuExitTest DISABLED_ContextMenuExitTest 19294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#else 19304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#define MAYBE_ContextMenuExitTest ContextMenuExitTest 19314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif 19322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)VIEW_TEST(BookmarkBarViewTest20, MAYBE_ContextMenuExitTest) 19342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Tests context menu by way of opening a context menu for a empty folder menu. 19362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// The opened context menu should behave as it is from the folder button. 19372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class BookmarkBarViewTest21 : public BookmarkBarViewEventTestBase { 19382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 19392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BookmarkBarViewTest21() 1940c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) : observer_(CreateEventTask(this, &BookmarkBarViewTest21::Step3)) { 19412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 19422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 19442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Move the mouse to the empty folder on the bookmark bar and press the 19452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // left mouse button. 1946c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void DoTestOnMessageLoop() OVERRIDE { 1947f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) views::LabelButton* button = GetBookmarkButton(5); 19482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress(button, ui_controls::LEFT, 19492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui_controls::DOWN | ui_controls::UP, 19502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest21::Step2)); 19512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 19522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 19542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Confirm that a menu for empty folder shows and right click the menu. 19552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void Step2() { 19562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Menu should be showing. 19572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::MenuItemView* menu = bb_view_->GetMenu(); 19582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(menu != NULL); 19592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::SubmenuView* submenu = menu->GetSubmenu(); 19612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(submenu->IsShowing()); 19622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(1, submenu->child_count()); 19632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::View* view = submenu->child_at(0); 19652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(view != NULL); 19662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(views::MenuItemView::kEmptyMenuItemViewID, view->id()); 19672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Right click on the first child to get its context menu. 19692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress(view, ui_controls::RIGHT, 19702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui_controls::DOWN | ui_controls::UP, base::Closure()); 19715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Step3 will be invoked by BookmarkContextMenuNotificationObserver. 19722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 19732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Confirm that context menu shows and click REMOVE menu. 19752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void Step3() { 19762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Make sure the context menu is showing. 19772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::MenuItemView* menu = bb_view_->GetContextMenu(); 19782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(menu != NULL); 19792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()); 19802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()->IsShowing()); 19812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::MenuItemView* delete_menu = 19832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) menu->GetMenuItemByID(IDC_BOOKMARK_BAR_REMOVE); 19842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(delete_menu); 19852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Click on the delete menu item. 19872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress(delete_menu, 19882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui_controls::LEFT, ui_controls::DOWN | ui_controls::UP, 19892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest21::Step4)); 19902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 19912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Confirm that the empty folder gets removed and menu doesn't show. 19932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void Step4() { 1994f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) views::LabelButton* button = GetBookmarkButton(5); 19952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(button); 1996f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("d"), button->GetText()); 19972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(bb_view_->GetContextMenu() == NULL); 19982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(bb_view_->GetMenu() == NULL); 19992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 20002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Done(); 20012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 20022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 20035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) BookmarkContextMenuNotificationObserver observer_; 20042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 20052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 20062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)VIEW_TEST(BookmarkBarViewTest21, ContextMenusForEmptyFolder) 2007