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" 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/generated_resources.h" 37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/aura/env.h" 38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/aura/env_observer.h" 39cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/aura/window.h" 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/clipboard/clipboard.h" 41868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "ui/base/test/ui_controls.h" 42d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/events/keycodes/keyboard_codes.h" 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/button/menu_button.h" 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/button/text_button.h" 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/menu/menu_controller.h" 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/menu/menu_item_view.h" 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/menu/submenu_view.h" 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/widget/widget.h" 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using base::ASCIIToUTF16; 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserThread; 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::OpenURLParams; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::PageNavigator; 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::WebContents; 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 58cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Waits for a views::Widget dialog to show up. 59cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class DialogWaiter : public aura::EnvObserver, 60cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public views::WidgetObserver { 61cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public: 62cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DialogWaiter() 63cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) : dialog_created_(false), 64cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) dialog_(NULL) { 65cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) aura::Env::GetInstance()->AddObserver(this); 66cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 67cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 68cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual ~DialogWaiter() { 69cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) aura::Env::GetInstance()->RemoveObserver(this); 70cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 71cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 72cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) views::Widget* WaitForDialog() { 73cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (dialog_created_) 74cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return dialog_; 75cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::MessageLoopForUI* loop = base::MessageLoopForUI::current(); 76cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::MessageLoopForUI::ScopedNestableTaskAllower allow_nested(loop); 77cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::RunLoop run_loop; 78cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) quit_closure_ = run_loop.QuitClosure(); 79cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) run_loop.Run(); 80cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return dialog_; 81cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 82cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 83cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) private: 84cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // aura::EnvObserver: 85cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void OnWindowInitialized(aura::Window* window) OVERRIDE { 86cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (dialog_) 87cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return; 88cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) views::Widget* widget = views::Widget::GetWidgetForNativeView(window); 89cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (!widget || !widget->IsDialogBox()) 90cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return; 91cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) dialog_ = widget; 92cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) dialog_->AddObserver(this); 93cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 94cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 95cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // views::WidgetObserver: 96cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void OnWidgetVisibilityChanged(views::Widget* widget, 97cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool visible) OVERRIDE { 98cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) CHECK_EQ(dialog_, widget); 99cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (visible) { 100cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) dialog_created_ = true; 101cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) dialog_->RemoveObserver(this); 102cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (!quit_closure_.is_null()) 103cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) quit_closure_.Run(); 104cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 105cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 106cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 107cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool dialog_created_; 108cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) views::Widget* dialog_; 109cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::Closure quit_closure_; 110cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 111cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(DialogWaiter); 112cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}; 113cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 114cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Waits for a dialog to terminate. 115cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class DialogCloseWaiter : public views::WidgetObserver { 116cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public: 117cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) explicit DialogCloseWaiter(views::Widget* dialog) 118cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) : dialog_closed_(false) { 119cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) dialog->AddObserver(this); 120cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 121cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 122cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual ~DialogCloseWaiter() { 123cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // It is not necessary to remove |this| from the dialog's observer, since 124cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // the dialog is destroyed before this waiter. 125cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 126cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 127cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void WaitForDialogClose() { 128cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (dialog_closed_) 129cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return; 130cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::MessageLoopForUI* loop = base::MessageLoopForUI::current(); 131cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::MessageLoopForUI::ScopedNestableTaskAllower allow_nested(loop); 132cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::RunLoop run_loop; 133cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) quit_closure_ = run_loop.QuitClosure(); 134cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) run_loop.Run(); 135cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 136cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 137cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) private: 138cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // views::WidgetObserver: 139cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void OnWidgetDestroyed(views::Widget* widget) OVERRIDE { 140cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) dialog_closed_ = true; 141cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (!quit_closure_.is_null()) 142cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) quit_closure_.Run(); 143cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 144cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 145cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool dialog_closed_; 146cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::Closure quit_closure_; 147cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 148cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(DialogCloseWaiter); 149cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}; 150cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 151cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Waits for a views::Widget to receive a Tab key. 152cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class TabKeyWaiter : public ui::EventHandler { 153cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public: 154cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) explicit TabKeyWaiter(views::Widget* widget) 155cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) : widget_(widget), 156cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) received_tab_(false) { 157cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) widget_->GetNativeView()->AddPreTargetHandler(this); 158cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 159cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 160cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual ~TabKeyWaiter() { 161cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) widget_->GetNativeView()->RemovePreTargetHandler(this); 162cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 163cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 164cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void WaitForTab() { 165cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (received_tab_) 166cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return; 167cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::MessageLoopForUI* loop = base::MessageLoopForUI::current(); 168cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::MessageLoopForUI::ScopedNestableTaskAllower allow_nested(loop); 169cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::RunLoop run_loop; 170cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) quit_closure_ = run_loop.QuitClosure(); 171cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) run_loop.Run(); 172cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 173cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 174cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) private: 175cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // ui::EventHandler: 176cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void OnKeyEvent(ui::KeyEvent* event) OVERRIDE { 177cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (event->type() == ui::ET_KEY_RELEASED && 178cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) event->key_code() == ui::VKEY_TAB) { 179cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) received_tab_ = true; 180cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (!quit_closure_.is_null()) 181cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) quit_closure_.Run(); 182cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 183cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 184cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 185cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) views::Widget* widget_; 186cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool received_tab_; 187cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::Closure quit_closure_; 188cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 189cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TabKeyWaiter); 190cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}; 191cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MoveMouseAndPress(const gfx::Point& screen_pos, 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::MouseButton button, 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int state, 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Closure& closure) { 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::SendMouseMove(screen_pos.x(), screen_pos.y()); 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::SendMouseEventsNotifyWhenDone(button, state, closure); 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// PageNavigator implementation that records the URL. 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TestingPageNavigator : public PageNavigator { 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual WebContents* OpenURL(const OpenURLParams& params) OVERRIDE { 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url_ = params.url; 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url_; 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2111e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// TODO(erg): Fix bookmark DBD tests on linux_aura. crbug.com/163931 212a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#if defined(OS_LINUX) && defined(USE_AURA) 21390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#define MAYBE(x) DISABLED_##x 21490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#else 21590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#define MAYBE(x) x 21690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#endif 21790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Base class for event generating bookmark view tests. These test are intended 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// to exercise View's menus, but that's easier done with BookmarkBarView rather 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// than View's menu itself. 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// SetUp creates a bookmark model with the following structure. 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// All folders are in upper case, all URLs in lower case. 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// F1 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// f1a 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// F11 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// f11a 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// * 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// a 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// b 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// c 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// d 2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// F2 2362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// e 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// OTHER 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// oa 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// OF 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ofa 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ofb 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// OF2 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// of2a 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// of2b 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// * if CreateBigMenu returns return true, 100 menu items are created here with 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the names f1-f100. 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Subclasses should be sure and invoke super's implementation of SetUp and 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TearDown. 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BookmarkBarViewEventTestBase : public ViewEventTestBase { 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkBarViewEventTestBase() 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : ViewEventTestBase(), 255a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch model_(NULL) {} 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetUp() OVERRIDE { 25823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) content_client_.reset(new ChromeContentClient); 25923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) content::SetContentClient(content_client_.get()); 26023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) browser_content_client_.reset(new chrome::ChromeContentBrowserClient()); 26123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) content::SetBrowserClientForTesting(browser_content_client_.get()); 26223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 263424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) views::MenuController::TurnOffMenuSelectionHoldForTest(); 2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BookmarkBarView::DisableAnimationsForTesting(true); 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_.reset(new TestingProfile()); 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_->CreateBookmarkModel(true); 2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) model_ = BookmarkModelFactory::GetForProfile(profile_.get()); 26958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) test::WaitForBookmarkModelToLoad(model_); 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_->GetPrefs()->SetBoolean(prefs::kShowBookmarkBar, true); 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Browser::CreateParams native_params(profile_.get(), 273eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch chrome::GetActiveDesktop()); 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser_.reset( 2752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::CreateBrowserWithTestWindowForParams(&native_params)); 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 277c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) local_state_.reset(new ScopedTestingLocalState( 278c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TestingBrowserProcess::GetGlobal())); 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model_->ClearStore(); 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bb_view_.reset(new BookmarkBarView(browser_.get(), NULL)); 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bb_view_->set_owned_by_client(); 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bb_view_->SetPageNavigator(&navigator_); 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddTestData(CreateBigMenu()); 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Calculate the preferred size so that one button doesn't fit, which 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // triggers the overflow button to appear. 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // BookmarkBarView::Layout does nothing if the parent is NULL and 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // GetPreferredSize hard codes a width of 1. For that reason we add the 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // BookmarkBarView to a dumby view as the parent. 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This code looks a bit hacky, but I've written it so that it shouldn't 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // be dependant upon any of the layout code in BookmarkBarView. Instead 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // we brute force search for a size that triggers the overflow button. 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::View tmp_parent; 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tmp_parent.AddChildView(bb_view_.get()); 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bb_view_pref_ = bb_view_->GetPreferredSize(); 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bb_view_pref_.set_width(1000); 303f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) views::LabelButton* button = GetBookmarkButton(6); 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while (button->visible()) { 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bb_view_pref_.set_width(bb_view_pref_.width() - 25); 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bb_view_->SetBounds(0, 0, bb_view_pref_.width(), bb_view_pref_.height()); 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bb_view_->Layout(); 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tmp_parent.RemoveChildView(bb_view_.get()); 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ViewEventTestBase::SetUp(); 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void TearDown() { 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Destroy everything, then run the message loop to ensure we delete all 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Tasks and fully shut down. 3182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser_->tab_strip_model()->CloseAllTabs(); 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bb_view_.reset(); 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser_.reset(); 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_.reset(); 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Run the message loop to ensure we delete allTasks and fully shut down. 324cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::MessageLoopForUI* loop = base::MessageLoopForUI::current(); 325cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::MessageLoopForUI::ScopedNestableTaskAllower allow_nested(loop); 326cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::RunLoop run_loop; 327cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) loop->PostTask(FROM_HERE, run_loop.QuitClosure()); 328cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) run_loop.Run(); 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ViewEventTestBase::TearDown(); 3312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BookmarkBarView::DisableAnimationsForTesting(false); 33223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 33323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) browser_content_client_.reset(); 33423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) content_client_.reset(); 33523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) content::SetContentClient(NULL); 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 3392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual views::View* CreateContentsView() OVERRIDE { 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return bb_view_.get(); 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 343cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual gfx::Size GetPreferredSize() const OVERRIDE { return bb_view_pref_; } 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) views::LabelButton* GetBookmarkButton(int view_index) { 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return bb_view_->GetBookmarkButton(view_index); 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // See comment above class description for what this does. 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool CreateBigMenu() { return false; } 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkModel* model_; 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<BookmarkBarView> bb_view_; 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestingPageNavigator navigator_; 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void AddTestData(bool big_menu) { 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const BookmarkNode* bb_node = model_->bookmark_bar_node(); 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string test_base = "file:///c:/tmp/"; 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const BookmarkNode* f1 = model_->AddFolder(bb_node, 0, ASCIIToUTF16("F1")); 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model_->AddURL(f1, 0, ASCIIToUTF16("f1a"), GURL(test_base + "f1a")); 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const BookmarkNode* f11 = model_->AddFolder(f1, 1, ASCIIToUTF16("F11")); 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model_->AddURL(f11, 0, ASCIIToUTF16("f11a"), GURL(test_base + "f11a")); 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (big_menu) { 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int i = 1; i <= 100; ++i) { 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model_->AddURL(f1, i + 1, ASCIIToUTF16("f") + base::IntToString16(i), 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL(test_base + "f" + base::IntToString(i))); 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model_->AddURL(bb_node, 1, ASCIIToUTF16("a"), GURL(test_base + "a")); 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model_->AddURL(bb_node, 2, ASCIIToUTF16("b"), GURL(test_base + "b")); 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model_->AddURL(bb_node, 3, ASCIIToUTF16("c"), GURL(test_base + "c")); 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model_->AddURL(bb_node, 4, ASCIIToUTF16("d"), GURL(test_base + "d")); 3742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) model_->AddFolder(bb_node, 5, ASCIIToUTF16("F2")); 3752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) model_->AddURL(bb_node, 6, ASCIIToUTF16("d"), GURL(test_base + "d")); 3762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model_->AddURL(model_->other_node(), 0, ASCIIToUTF16("oa"), 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL(test_base + "oa")); 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const BookmarkNode* of = model_->AddFolder(model_->other_node(), 1, 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("OF")); 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model_->AddURL(of, 0, ASCIIToUTF16("ofa"), GURL(test_base + "ofa")); 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model_->AddURL(of, 1, ASCIIToUTF16("ofb"), GURL(test_base + "ofb")); 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const BookmarkNode* of2 = model_->AddFolder(model_->other_node(), 2, 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("OF2")); 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model_->AddURL(of2, 0, ASCIIToUTF16("of2a"), GURL(test_base + "of2a")); 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model_->AddURL(of2, 1, ASCIIToUTF16("of2b"), GURL(test_base + "of2b")); 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Size bb_view_pref_; 39023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) scoped_ptr<ChromeContentClient> content_client_; 39123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) scoped_ptr<chrome::ChromeContentBrowserClient> browser_content_client_; 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<TestingProfile> profile_; 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<Browser> browser_; 394c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<ScopedTestingLocalState> local_state_; 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Clicks on first menu, makes sure button is depressed. Moves mouse to first 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// child, clicks it and makes sure a navigation occurs. 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BookmarkBarViewTest1 : public BookmarkBarViewEventTestBase { 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 4012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void DoTestOnMessageLoop() OVERRIDE { 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Move the mouse to the first folder on the bookmark bar and press the 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // mouse. 404f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) views::LabelButton* button = GetBookmarkButton(0); 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress(button, ui_controls::LEFT, 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::DOWN | ui_controls::UP, 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest1::Step2)); 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step2() { 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Menu should be showing. 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetMenu(); 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu != NULL); 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()->IsShowing()); 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Button should be depressed. 418f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) views::LabelButton* button = GetBookmarkButton(0); 4192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(button->state() == views::CustomButton::STATE_PRESSED); 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Click on the 2nd menu item (A URL). 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()); 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu_to_select = 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu->GetSubmenu()->GetMenuItemAt(0); 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress(menu_to_select, ui_controls::LEFT, 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::DOWN | ui_controls::UP, 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest1::Step3)); 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step3() { 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should have navigated to URL f1a. 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(navigator_.url_ == 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model_->bookmark_bar_node()->GetChild(0)->GetChild(0)->url()); 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure button is no longer pushed. 437f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) views::LabelButton* button = GetBookmarkButton(0); 4382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(button->state() == views::CustomButton::STATE_NORMAL); 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetMenu(); 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu == NULL || !menu->GetSubmenu()->IsShowing()); 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Done(); 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)VIEW_TEST(BookmarkBarViewTest1, Basic) 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Brings up menu, clicks on empty space and make sure menu hides. 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BookmarkBarViewTest2 : public BookmarkBarViewEventTestBase { 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 4522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void DoTestOnMessageLoop() OVERRIDE { 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Move the mouse to the first folder on the bookmark bar and press the 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // mouse. 455f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) views::LabelButton* button = GetBookmarkButton(0); 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress(button, ui_controls::LEFT, 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::DOWN | ui_controls::UP, 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest2::Step2)); 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step2() { 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Menu should be showing. 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetMenu(); 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu != NULL && menu->GetSubmenu()->IsShowing()); 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Click on 0x0, which should trigger closing menu. 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // NOTE: this code assume there is a left margin, which is currently 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // true. If that changes, this code will need to find another empty space 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // to press the mouse on. 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Point mouse_loc; 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::View::ConvertPointToScreen(bb_view_.get(), &mouse_loc); 4732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui_controls::SendMouseMoveNotifyWhenDone(0, 0, 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest2::Step3)); 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step3() { 4782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // As the click is on the desktop the hook never sees the up, so we only 4792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // wait on the down. We still send the up though else the system thinks 4802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // the mouse is still down. 4812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui_controls::SendMouseEventsNotifyWhenDone( 4822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui_controls::LEFT, ui_controls::DOWN, 4832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest2::Step4)); 4842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui_controls::SendMouseEvents(ui_controls::LEFT, ui_controls::UP); 4852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 4862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void Step4() { 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The menu shouldn't be showing. 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetMenu(); 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu == NULL || !menu->GetSubmenu()->IsShowing()); 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure button is no longer pushed. 493f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) views::LabelButton* button = GetBookmarkButton(0); 4942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(button->state() == views::CustomButton::STATE_NORMAL); 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Done(); 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5001e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && defined(USE_AURA) 5011e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// TODO(erg): linux_aura bringup: http://crbug.com/163931 5021e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#define MAYBE_HideOnDesktopClick DISABLED_HideOnDesktopClick 5031e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#else 5041e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#define MAYBE_HideOnDesktopClick HideOnDesktopClick 5051e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#endif 5061e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5071e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)VIEW_TEST(BookmarkBarViewTest2, MAYBE_HideOnDesktopClick) 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Brings up menu. Moves over child to make sure submenu appears, moves over 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// another child and make sure next menu appears. 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BookmarkBarViewTest3 : public BookmarkBarViewEventTestBase { 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 5132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void DoTestOnMessageLoop() OVERRIDE { 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Move the mouse to the first folder on the bookmark bar and press the 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // mouse. 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuButton* button = bb_view_->other_bookmarked_button(); 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress(button, ui_controls::LEFT, 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::DOWN | ui_controls::UP, 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest3::Step2)); 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step2() { 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Menu should be showing. 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetMenu(); 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu != NULL); 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()->IsShowing()); 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* child_menu = 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu->GetSubmenu()->GetMenuItemAt(1); 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(child_menu != NULL); 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Click on second child, which has a submenu. 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress(child_menu, ui_controls::LEFT, 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::DOWN | ui_controls::UP, 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest3::Step3)); 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step3() { 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure sub menu is showing. 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetMenu(); 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu); 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* child_menu = 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu->GetSubmenu()->GetMenuItemAt(1); 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(child_menu->GetSubmenu() != NULL); 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(child_menu->GetSubmenu()->IsShowing()); 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Click on third child, which has a submenu too. 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) child_menu = menu->GetSubmenu()->GetMenuItemAt(2); 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(child_menu != NULL); 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress(child_menu, ui_controls::LEFT, 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::DOWN | ui_controls::UP, 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest3::Step4)); 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step4() { 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure sub menu we first clicked isn't showing. 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetMenu(); 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* child_menu = 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu->GetSubmenu()->GetMenuItemAt(1); 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(child_menu->GetSubmenu() != NULL); 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(child_menu->GetSubmenu()->IsShowing()); 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // And submenu we last clicked is showing. 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) child_menu = menu->GetSubmenu()->GetMenuItemAt(2); 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(child_menu != NULL); 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(child_menu->GetSubmenu()->IsShowing()); 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Nothing should have been selected. 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GURL(), navigator_.url_); 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Hide menu. 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu->GetMenuController()->CancelAll(); 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Done(); 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)VIEW_TEST(BookmarkBarViewTest3, Submenus) 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Observer that posts task upon the context menu creation. 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This is necessary for Linux as the context menu has to check 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the clipboard, which invokes the event loop. 5845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class BookmarkContextMenuNotificationObserver 5855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) : public content::NotificationObserver { 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 5875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) explicit BookmarkContextMenuNotificationObserver(const base::Closure& task) 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : task_(task) { 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registrar_.Add(this, 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NOTIFICATION_BOOKMARK_CONTEXT_MENU_SHOWN, 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Observe(int type, 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::NotificationSource& source, 5962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const content::NotificationDetails& details) OVERRIDE { 597b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) base::MessageLoop::current()->PostTask(FROM_HERE, task_); 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets the task that is posted when the context menu is shown. 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_task(const base::Closure& task) { task_ = task; } 6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationRegistrar registrar_; 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Closure task_; 6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(BookmarkContextMenuNotificationObserver); 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests context menus by way of opening a context menu for a bookmark, 6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// then right clicking to get context menu and selecting the first menu item 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// (open). 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BookmarkBarViewTest4 : public BookmarkBarViewEventTestBase { 6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkBarViewTest4() 616c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) : observer_(CreateEventTask(this, &BookmarkBarViewTest4::Step3)) { 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 6202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void DoTestOnMessageLoop() OVERRIDE { 6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Move the mouse to the first folder on the bookmark bar and press the 6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // mouse. 623f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) views::LabelButton* button = bb_view_->other_bookmarked_button(); 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress(button, ui_controls::LEFT, 6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::DOWN | ui_controls::UP, 6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest4::Step2)); 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step2() { 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Menu should be showing. 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetMenu(); 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu != NULL); 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()->IsShowing()); 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* child_menu = 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu->GetSubmenu()->GetMenuItemAt(0); 6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(child_menu != NULL); 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Right click on the first child to get its context menu. 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress(child_menu, ui_controls::RIGHT, 6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::DOWN | ui_controls::UP, base::Closure()); 6435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Step3 will be invoked by BookmarkContextMenuNotificationObserver. 6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step3() { 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure the context menu is showing. 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetContextMenu(); 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu != NULL); 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()); 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()->IsShowing()); 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Select the first menu item (open). 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress( 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu->GetSubmenu()->GetMenuItemAt(0), 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::LEFT, ui_controls::DOWN | ui_controls::UP, 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest4::Step4)); 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step4() { 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(navigator_.url_, model_->other_node()->GetChild(0)->url()); 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Done(); 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) BookmarkContextMenuNotificationObserver observer_; 6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)VIEW_TEST(BookmarkBarViewTest4, ContextMenus) 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests drag and drop within the same menu. 6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BookmarkBarViewTest5 : public BookmarkBarViewEventTestBase { 6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 6732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void DoTestOnMessageLoop() OVERRIDE { 6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url_dragging_ = 6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) model_->bookmark_bar_node()->GetChild(0)->GetChild(0)->url(); 6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Move the mouse to the first folder on the bookmark bar and press the 6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // mouse. 679f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) views::LabelButton* button = GetBookmarkButton(0); 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress(button, ui_controls::LEFT, 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::DOWN | ui_controls::UP, 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest5::Step2)); 6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step2() { 6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Menu should be showing. 6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetMenu(); 6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu != NULL); 6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()->IsShowing()); 6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* child_menu = 6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu->GetSubmenu()->GetMenuItemAt(0); 6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(child_menu != NULL); 6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Move mouse to center of menu and press button. 6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress(child_menu, ui_controls::LEFT, 6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::DOWN, 6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest5::Step3)); 7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step3() { 7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* target_menu = 7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bb_view_->GetMenu()->GetSubmenu()->GetMenuItemAt(1); 7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Point loc(1, target_menu->height() - 1); 7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::View::ConvertPointToScreen(target_menu, &loc); 7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Start a drag. 7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::SendMouseMoveNotifyWhenDone(loc.x() + 10, loc.y(), 7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest5::Step4)); 7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // See comment above this method as to why we do this. 7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScheduleMouseMoveInBackground(loc.x(), loc.y()); 7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step4() { 7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Drop the item so that it's now the second item. 7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* target_menu = 7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bb_view_->GetMenu()->GetSubmenu()->GetMenuItemAt(1); 7202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Point loc(1, target_menu->height() - 2); 7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::View::ConvertPointToScreen(target_menu, &loc); 7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::SendMouseMove(loc.x(), loc.y()); 7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::SendMouseEventsNotifyWhenDone(ui_controls::LEFT, 7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::UP, 7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest5::Step5)); 7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step5() { 7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url = model_->bookmark_bar_node()->GetChild(0)->GetChild(1)->url(); 7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(url_dragging_, url); 7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Done(); 7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url_dragging_; 7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 73890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)VIEW_TEST(BookmarkBarViewTest5, MAYBE(DND)) 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) 11618bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)VIEW_TEST(BookmarkBarViewTest10, KeyEvents) 11625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Make sure the menu closes with the following sequence: show menu, show 11645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// context menu, close context menu (via escape), then click else where. This 11655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// effectively verifies we maintain mouse capture after the context menu is 11665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// hidden. 11675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BookmarkBarViewTest11 : public BookmarkBarViewEventTestBase { 11685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 11695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkBarViewTest11() 1170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) : observer_(CreateEventTask(this, &BookmarkBarViewTest11::Step3)) { 11715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 11742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void DoTestOnMessageLoop() OVERRIDE { 11755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Move the mouse to the first folder on the bookmark bar and press the 11765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // mouse. 1177f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) views::LabelButton* button = bb_view_->other_bookmarked_button(); 11785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress(button, ui_controls::LEFT, 11795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::DOWN | ui_controls::UP, 11805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest11::Step2)); 11815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 11845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step2() { 11855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Menu should be showing. 11865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetMenu(); 11875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu != NULL); 11885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()->IsShowing()); 11895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* child_menu = 11915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu->GetSubmenu()->GetMenuItemAt(0); 11925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(child_menu != NULL); 11935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Right click on the first child to get its context menu. 11955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress(child_menu, ui_controls::RIGHT, 11965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::DOWN | ui_controls::UP, base::Closure()); 11975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Step3 will be invoked by BookmarkContextMenuNotificationObserver. 11985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step3() { 12015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Send escape so that the context menu hides. 12025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::SendKeyPressNotifyWhenDone( 12032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) window_->GetNativeWindow(), ui::VKEY_ESCAPE, false, false, false, false, 12045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest11::Step4)); 12055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step4() { 12085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure the context menu is no longer showing. 12095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetContextMenu(); 12105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(!menu || !menu->GetSubmenu() || 12115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !menu->GetSubmenu()->IsShowing()); 12125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // But the menu should be showing. 12145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu = bb_view_->GetMenu(); 12155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu && menu->GetSubmenu() && menu->GetSubmenu()->IsShowing()); 12165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Now click on empty space. 12185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Point mouse_loc; 12195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::View::ConvertPointToScreen(bb_view_.get(), &mouse_loc); 12205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::SendMouseMove(mouse_loc.x(), mouse_loc.y()); 12215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::SendMouseEventsNotifyWhenDone( 12225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::LEFT, ui_controls::UP | ui_controls::DOWN, 12235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest11::Step5)); 12245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step5() { 12275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure the menu is not showing. 12285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetMenu(); 12295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(!menu || !menu->GetSubmenu() || 12305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !menu->GetSubmenu()->IsShowing()); 12315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Done(); 12325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) BookmarkContextMenuNotificationObserver observer_; 12355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 12365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && defined(USE_AURA) 12381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// TODO(erg): linux_aura bringup: http://crbug.com/163931 12391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#define MAYBE_CloseMenuAfterClosingContextMenu \ 12401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) DISABLED_CloseMenuAfterClosingContextMenu 12411e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#else 12421e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#define MAYBE_CloseMenuAfterClosingContextMenu CloseMenuAfterClosingContextMenu 12431e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#endif 12441e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 12451e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)VIEW_TEST(BookmarkBarViewTest11, MAYBE_CloseMenuAfterClosingContextMenu) 12465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests showing a modal dialog from a context menu. 12485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BookmarkBarViewTest12 : public BookmarkBarViewEventTestBase { 12495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 12502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void DoTestOnMessageLoop() OVERRIDE { 12515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Open up the other folder. 1252f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) views::LabelButton* button = bb_view_->other_bookmarked_button(); 12535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress(button, ui_controls::LEFT, 12545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::DOWN | ui_controls::UP, 12555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest12::Step2)); 12562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::num_bookmark_urls_before_prompting = 1; 12575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~BookmarkBarViewTest12() { 12602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::num_bookmark_urls_before_prompting = 15; 12615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 12645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step2() { 12655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Menu should be showing. 12665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetMenu(); 12675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu != NULL); 12685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()->IsShowing()); 12695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* child_menu = 12715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu->GetSubmenu()->GetMenuItemAt(1); 12725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(child_menu != NULL); 12735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Right click on the second child (a folder) to get its context menu. 12755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress(child_menu, ui_controls::RIGHT, 12765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::DOWN | ui_controls::UP, 12775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest12::Step3)); 12785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step3() { 12815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure the context menu is showing. 12825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetContextMenu(); 12835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu && menu->GetSubmenu() && menu->GetSubmenu()->IsShowing()); 12845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Select the first item in the context menu (open all). 12865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* child_menu = 12875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu->GetSubmenu()->GetMenuItemAt(0); 12885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(child_menu != NULL); 12895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1290cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Click and wait until the dialog box appears. 1291cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) scoped_ptr<DialogWaiter> dialog_waiter(new DialogWaiter()); 1292cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress( 1293cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) child_menu, 1294cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ui_controls::LEFT, 1295cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ui_controls::DOWN | ui_controls::UP, 1296cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::Bind( 1297cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) &BookmarkBarViewTest12::Step4, this, base::Passed(&dialog_waiter))); 12985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1300cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void Step4(scoped_ptr<DialogWaiter> waiter) { 1301cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) views::Widget* dialog = waiter->WaitForDialog(); 1302cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) waiter.reset(); 1303cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1304cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Press tab to give focus to the cancel button. Wait until the widget 1305cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // receives the tab key. 1306cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) TabKeyWaiter tab_waiter(dialog); 13072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui_controls::SendKeyPress( 13082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) window_->GetNativeWindow(), ui::VKEY_TAB, false, false, false, false); 1309cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) tab_waiter.WaitForTab(); 13105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // For some reason return isn't processed correctly unless we delay. 1312b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) base::MessageLoop::current()->PostDelayedTask( 1313b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) FROM_HERE, 1314cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::Bind( 1315cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) &BookmarkBarViewTest12::Step5, this, base::Unretained(dialog)), 13165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::TimeDelta::FromSeconds(1)); 13175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1319cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void Step5(views::Widget* dialog) { 1320cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DialogCloseWaiter waiter(dialog); 13215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // And press enter so that the cancel button is selected. 1322cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ui_controls::SendKeyPressNotifyWhenDone(window_->GetNativeWindow(), 1323cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ui::VKEY_RETURN, 1324cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) false, 1325cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) false, 1326cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) false, 1327cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) false, 1328cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::Closure()); 1329cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) waiter.WaitForDialogClose(); 13305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Done(); 13315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 13335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13341e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && defined(USE_AURA) 13351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// TODO(erg): linux_aura bringup: http://crbug.com/163931 13361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#define MAYBE_CloseWithModalDialog DISABLED_CloseWithModalDialog 13371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#else 13381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#define MAYBE_CloseWithModalDialog CloseWithModalDialog 13391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#endif 13401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 13411e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)VIEW_TEST(BookmarkBarViewTest12, MAYBE_CloseWithModalDialog) 13425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests clicking on the separator of a context menu (this is for coverage of 13445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// bug 17862). 13455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BookmarkBarViewTest13 : public BookmarkBarViewEventTestBase { 13465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 13475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkBarViewTest13() 1348c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) : observer_(CreateEventTask(this, &BookmarkBarViewTest13::Step3)) { 13495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 13522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void DoTestOnMessageLoop() OVERRIDE { 13535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Move the mouse to the first folder on the bookmark bar and press the 13545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // mouse. 1355f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) views::LabelButton* button = bb_view_->other_bookmarked_button(); 13565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress(button, ui_controls::LEFT, 13575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::DOWN | ui_controls::UP, 13585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest13::Step2)); 13595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 13625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step2() { 13635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Menu should be showing. 13645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetMenu(); 13655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu != NULL); 13665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()->IsShowing()); 13675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* child_menu = 13695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu->GetSubmenu()->GetMenuItemAt(0); 13705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(child_menu != NULL); 13715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Right click on the first child to get its context menu. 13735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress(child_menu, ui_controls::RIGHT, 13745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::DOWN | ui_controls::UP, base::Closure()); 13755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Step3 will be invoked by BookmarkContextMenuNotificationObserver. 13765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step3() { 13795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure the context menu is showing. 13805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetContextMenu(); 13815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu != NULL); 13825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()); 13835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()->IsShowing()); 13845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Find the first separator. 13865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::SubmenuView* submenu = menu->GetSubmenu(); 13875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::View* separator_view = NULL; 13885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int i = 0; i < submenu->child_count(); ++i) { 13895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (submenu->child_at(i)->id() != views::MenuItemView::kMenuItemViewID) { 13905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) separator_view = submenu->child_at(i); 13915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 13925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(separator_view); 13955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Click on the separator. Clicking on the separator shouldn't visually 13975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // change anything. 13985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress(separator_view, 13995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::LEFT, ui_controls::DOWN | ui_controls::UP, 14005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest13::Step4)); 14015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 14025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step4() { 14045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The context menu should still be showing. 14055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetContextMenu(); 14065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu != NULL); 14075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()); 14085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()->IsShowing()); 14095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Select the first context menu item. 14115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress( 14125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu->GetSubmenu()->GetMenuItemAt(0), 14135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::LEFT, 14145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::DOWN | ui_controls::UP, 14155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest13::Step5)); 14165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 14175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step5() { 14195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Done(); 14205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 14215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) BookmarkContextMenuNotificationObserver observer_; 14235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 14245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)VIEW_TEST(BookmarkBarViewTest13, ClickOnContextMenuSeparator) 14265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Makes sure right clicking on a folder on the bookmark bar doesn't result in 14285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// both a context menu and showing the menu. 14295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BookmarkBarViewTest14 : public BookmarkBarViewEventTestBase { 14305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 14315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkBarViewTest14() 1432c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) : observer_(CreateEventTask(this, &BookmarkBarViewTest14::Step2)) { 14335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 14345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 14362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void DoTestOnMessageLoop() OVERRIDE { 14375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Move the mouse to the first folder on the bookmark bar and press the 14385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // right mouse button. 1439f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) views::LabelButton* button = GetBookmarkButton(0); 14405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress(button, ui_controls::RIGHT, 14415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::DOWN | ui_controls::UP, base::Closure()); 14425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Step2 will be invoked by BookmarkContextMenuNotificationObserver. 14435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 14445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 14465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step2() { 14485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Menu should NOT be showing. 14495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetMenu(); 14505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu == NULL); 14515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Send escape so that the context menu hides. 14535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::SendKeyPressNotifyWhenDone( 14542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) window_->GetNativeWindow(), ui::VKEY_ESCAPE, false, false, false, false, 14555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest14::Step3)); 14565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 14575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step3() { 14595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Done(); 14605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 14615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) BookmarkContextMenuNotificationObserver observer_; 14635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 14645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)VIEW_TEST(BookmarkBarViewTest14, ContextMenus2) 14665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Makes sure deleting from the context menu keeps the bookmark menu showing. 14685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BookmarkBarViewTest15 : public BookmarkBarViewEventTestBase { 14695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 14705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkBarViewTest15() 14715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : deleted_menu_id_(0), 1472c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) observer_(CreateEventTask(this, &BookmarkBarViewTest15::Step3)) { 14735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 14745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 14762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void DoTestOnMessageLoop() OVERRIDE { 14775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Show the other bookmarks. 1478f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) views::LabelButton* button = bb_view_->other_bookmarked_button(); 14795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress(button, ui_controls::LEFT, 14805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::DOWN | ui_controls::UP, 14815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest15::Step2)); 14825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 14835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 14855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step2() { 14865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Menu should be showing. 14875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetMenu(); 14885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu != NULL); 14895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()->IsShowing()); 14905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* child_menu = 14925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu->GetSubmenu()->GetMenuItemAt(1); 14935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(child_menu != NULL); 14945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) deleted_menu_id_ = child_menu->GetCommand(); 14965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Right click on the second child to get its context menu. 14985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress(child_menu, ui_controls::RIGHT, 14995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::DOWN | ui_controls::UP, base::Closure()); 15005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Step3 will be invoked by BookmarkContextMenuNotificationObserver. 15015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step3() { 15045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure the context menu is showing. 15055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetContextMenu(); 15065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu != NULL); 15075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()); 15085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()->IsShowing()); 15095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* delete_menu = 15115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu->GetMenuItemByID(IDC_BOOKMARK_BAR_REMOVE); 15125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(delete_menu); 15135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Click on the delete button. 15155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress(delete_menu, 15165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::LEFT, ui_controls::DOWN | ui_controls::UP, 15175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest15::Step4)); 15185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step4() { 15215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The context menu should not be showing. 15225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* context_menu = bb_view_->GetContextMenu(); 15235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(context_menu == NULL); 15245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // But the menu should be showing. 15265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetMenu(); 15275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu != NULL); 15285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()->IsShowing()); 15295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // And the deleted_menu_id_ should have been removed. 15315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetMenuItemByID(deleted_menu_id_) == NULL); 15325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bb_view_->GetMenu()->GetMenuController()->CancelAll(); 15345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Done(); 15365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int deleted_menu_id_; 15395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) BookmarkContextMenuNotificationObserver observer_; 15405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 15415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)VIEW_TEST(BookmarkBarViewTest15, MenuStaysVisibleAfterDelete) 15435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that we don't crash or get stuck if the parent of a menu is closed. 15455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BookmarkBarViewTest16 : public BookmarkBarViewEventTestBase { 15465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 15472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void DoTestOnMessageLoop() OVERRIDE { 15485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Move the mouse to the first folder on the bookmark bar and press the 15495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // mouse. 1550f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) views::LabelButton* button = GetBookmarkButton(0); 15515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress(button, ui_controls::LEFT, 15525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::DOWN | ui_controls::UP, 15535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest16::Step2)); 15545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 15575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step2() { 15585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Menu should be showing. 15595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetMenu(); 15605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu != NULL); 15615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()->IsShowing()); 15625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Button should be depressed. 1564f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) views::LabelButton* button = GetBookmarkButton(0); 15652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(button->state() == views::CustomButton::STATE_PRESSED); 15665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Close the window. 15685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window_->Close(); 15695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window_ = NULL; 15705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1571b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) base::MessageLoop::current()->PostTask( 15725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FROM_HERE, CreateEventTask(this, &BookmarkBarViewTest16::Done)); 15735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 15755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15761e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#if defined(OS_LINUX) && !defined(OS_CHROMEOS) 15771e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// TODO(erg): linux_aura bringup: http://crbug.com/163931 15781e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#define MAYBE_DeleteMenu DISABLED_DeleteMenu 15791e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#else 15801e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#define MAYBE_DeleteMenu DeleteMenu 15811e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#endif 15821e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 15831e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)VIEW_TEST(BookmarkBarViewTest16, MAYBE_DeleteMenu) 15845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Makes sure right clicking on an item while a context menu is already showing 15865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// doesn't crash and works. 15875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BookmarkBarViewTest17 : public BookmarkBarViewEventTestBase { 15885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 15895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkBarViewTest17() 1590c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) : observer_(CreateEventTask(this, &BookmarkBarViewTest17::Step3)) { 15915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 15942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void DoTestOnMessageLoop() OVERRIDE { 15955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Move the mouse to the other folder on the bookmark bar and press the 15965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // left mouse button. 1597f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) views::LabelButton* button = bb_view_->other_bookmarked_button(); 15985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress(button, ui_controls::LEFT, 15995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::DOWN | ui_controls::UP, 16005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest17::Step2)); 16015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 16025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 16045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step2() { 16055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Menu should be showing. 16065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetMenu(); 16075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu != NULL); 16085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()->IsShowing()); 16095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Right click on the second item to show its context menu. 16115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* child_menu = menu->GetSubmenu()->GetMenuItemAt(2); 16125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(child_menu != NULL); 16135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress(child_menu, ui_controls::RIGHT, 16145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::DOWN | ui_controls::UP, base::Closure()); 16155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Step3 will be invoked by BookmarkContextMenuNotificationObserver. 16165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 16175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step3() { 16195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure the context menu is showing. 16205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* context_menu = bb_view_->GetContextMenu(); 16215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(context_menu != NULL); 16225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(context_menu->GetSubmenu()); 16235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(context_menu->GetSubmenu()->IsShowing()); 16245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Right click on the first menu item to trigger its context menu. 16265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetMenu(); 16275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu != NULL); 16285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()->IsShowing()); 16295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* child_menu = menu->GetSubmenu()->GetMenuItemAt(1); 16305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(child_menu != NULL); 16315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The context menu and child_menu can be overlapped, calculate the 16335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // non-intersected Rect of the child menu and click on its center to make 16345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // sure the click is always on the child menu. 16355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect context_rect = context_menu->GetSubmenu()->GetBoundsInScreen(); 16365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect child_menu_rect = child_menu->GetBoundsInScreen(); 16375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect clickable_rect = 16385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::SubtractRects(child_menu_rect, context_rect); 16395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(clickable_rect.IsEmpty()); 16405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer_.set_task(CreateEventTask(this, &BookmarkBarViewTest17::Step4)); 16415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MoveMouseAndPress(clickable_rect.CenterPoint(), ui_controls::RIGHT, 16425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::DOWN | ui_controls::UP, base::Closure()); 16435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Step4 will be invoked by BookmarkContextMenuNotificationObserver. 16445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 16455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step4() { 16475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The context menu should still be showing. 16485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* context_menu = bb_view_->GetContextMenu(); 16495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(context_menu != NULL); 16505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // And the menu should be showing. 16525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetMenu(); 16535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu != NULL); 16545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()->IsShowing()); 16555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bb_view_->GetMenu()->GetMenuController()->CancelAll(); 16575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Done(); 16595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 16605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) BookmarkContextMenuNotificationObserver observer_; 16625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 16635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16641e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && defined(USE_AURA) 16651e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// TODO(erg): linux_aura bringup: http://crbug.com/163931 16661e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#define MAYBE_ContextMenus3 DISABLED_ContextMenus3 16671e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#else 16681e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#define MAYBE_ContextMenus3 ContextMenus3 16691e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#endif 16701e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 16711e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)VIEW_TEST(BookmarkBarViewTest17, MAYBE_ContextMenus3) 16725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Verifies sibling menus works. Clicks on the 'other bookmarks' folder, then 16745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// moves the mouse over the first item on the bookmark bar and makes sure the 16755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// menu appears. 16765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BookmarkBarViewTest18 : public BookmarkBarViewEventTestBase { 16775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 16782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void DoTestOnMessageLoop() OVERRIDE { 16795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Move the mouse to the other folder on the bookmark bar and press the 16805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // left mouse button. 1681f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) views::LabelButton* button = bb_view_->other_bookmarked_button(); 16825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress(button, ui_controls::LEFT, 16835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::DOWN | ui_controls::UP, 16845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest18::Step2)); 16855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 16865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 16885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step2() { 16895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Menu should be showing. 16905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetMenu(); 16915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu != NULL); 16925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()->IsShowing()); 16935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Move the mouse to the first folder on the bookmark bar 1695f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) views::LabelButton* button = GetBookmarkButton(0); 16965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Point button_center(button->width() / 2, button->height() / 2); 16975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::View::ConvertPointToScreen(button, &button_center); 16985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::SendMouseMoveNotifyWhenDone( 16995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) button_center.x(), button_center.y(), 17005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest18::Step3)); 17015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step3() { 17045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure the menu is showing. 17055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetMenu(); 17065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu != NULL); 17075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()->IsShowing()); 17085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The menu for the first folder should be in the pressed state (since the 17102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // menu is showing for it). 17112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(views::CustomButton::STATE_PRESSED, 17122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetBookmarkButton(0)->state()); 17132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 17145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu->GetMenuController()->CancelAll(); 17155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Done(); 17175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 17195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17201e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#if defined(OS_LINUX) && !defined(OS_CHROMEOS) 17211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// TODO(erg): linux_aura bringup: http://crbug.com/163931 17221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#define MAYBE_BookmarkBarViewTest18_SiblingMenu \ 17231e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) DISABLED_BookmarkBarViewTest18_SiblingMenu 17241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#else 17251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#define MAYBE_BookmarkBarViewTest18_SiblingMenu \ 17261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) BookmarkBarViewTest18_SiblingMenu 17271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#endif 17281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 17291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)VIEW_TEST(BookmarkBarViewTest18, MAYBE_BookmarkBarViewTest18_SiblingMenu) 17305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Verifies mousing over an already open sibling menu doesn't prematurely cancel 17325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the menu. 17335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BookmarkBarViewTest19 : public BookmarkBarViewEventTestBase { 17345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 17352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void DoTestOnMessageLoop() OVERRIDE { 17365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Move the mouse to the other folder on the bookmark bar and press the 17375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // left mouse button. 1738f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) views::LabelButton* button = bb_view_->other_bookmarked_button(); 17395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress(button, ui_controls::LEFT, 17405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::DOWN | ui_controls::UP, 17415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest19::Step2)); 17425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 17455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step2() { 17465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Menu should be showing. 17475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetMenu(); 17485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu != NULL); 17495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()->IsShowing()); 17505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Click on the first folder. 17525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* child_menu = menu->GetSubmenu()->GetMenuItemAt(1); 17535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(child_menu != NULL); 17545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress( 17555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) child_menu, ui_controls::LEFT, 17565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::DOWN | ui_controls::UP, 17575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest19::Step3)); 17585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step3() { 17615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure the menu is showing. 17625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetMenu(); 17635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu != NULL); 17645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()->IsShowing()); 17655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Move the mouse back to the other bookmark button. 1767f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) views::LabelButton* button = bb_view_->other_bookmarked_button(); 17685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Point button_center(button->width() / 2, button->height() / 2); 17695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::View::ConvertPointToScreen(button, &button_center); 17705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::SendMouseMoveNotifyWhenDone( 17715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) button_center.x() + 1, button_center.y() + 1, 17725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest19::Step4)); 17735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step4() { 17765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Menu should be showing. 17775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetMenu(); 17785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu != NULL); 17795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()->IsShowing()); 17805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Click on the first folder. 17825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* child_menu = menu->GetSubmenu()->GetMenuItemAt(1); 17835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(child_menu != NULL); 17845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress( 17855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) child_menu, 17865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::LEFT, 17875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_controls::DOWN | ui_controls::UP, 17885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest19::Step5)); 17895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Step5() { 17925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure the menu is showing. 17935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::MenuItemView* menu = bb_view_->GetMenu(); 17945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu != NULL); 17955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()->IsShowing()); 17965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) menu->GetMenuController()->CancelAll(); 17985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Done(); 18005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 18015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 18025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)VIEW_TEST(BookmarkBarViewTest19, BookmarkBarViewTest19_SiblingMenu) 18042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 18052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Verify that when clicking a mouse button outside a context menu, 18062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// the context menu is dismissed *and* the underlying view receives 18072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// the the mouse event (due to event reposting). 18082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class BookmarkBarViewTest20 : public BookmarkBarViewEventTestBase { 18092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 18102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BookmarkBarViewTest20() : test_view_(new TestViewForMenuExit) {} 18112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 18122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 18132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void DoTestOnMessageLoop() OVERRIDE { 18142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Add |test_view_| next to |bb_view_|. 18152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::View* parent = bb_view_->parent(); 18162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::View* container_view = new ContainerViewForMenuExit; 18172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) container_view->AddChildView(bb_view_.get()); 18182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) container_view->AddChildView(test_view_); 18192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) parent->AddChildView(container_view); 18202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) parent->Layout(); 18212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 18222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(test_view_->press_count(), 0); 18232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 18242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Move the mouse to the Test View and press the left mouse button. 18252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress( 18262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) test_view_, ui_controls::LEFT, ui_controls::DOWN | ui_controls::UP, 18272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest20::Step1)); 18282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 18292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 18302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 18312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void Step1() { 18322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(test_view_->press_count(), 1); 18332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(bb_view_->GetMenu() == NULL); 18342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 18352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Move the mouse to the first folder on the bookmark bar and press the 18362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // left mouse button. 1837f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) views::LabelButton* button = GetBookmarkButton(0); 18382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress( 18392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) button, ui_controls::LEFT, ui_controls::DOWN | ui_controls::UP, 18402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest20::Step2)); 18412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 18422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 18432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void Step2() { 18442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(test_view_->press_count(), 1); 18452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::MenuItemView* menu = bb_view_->GetMenu(); 18462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(menu != NULL); 18472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()->IsShowing()); 18482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 18492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Move the mouse to the Test View and press the left mouse button. 18502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The context menu will consume the event and exit. Thereafter, 18512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // the event is reposted and delivered to the Test View which 18522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // increases its press-count. 18532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress( 18542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) test_view_, ui_controls::LEFT, ui_controls::DOWN | ui_controls::UP, 18552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest20::Step3)); 18562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 18572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 18582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void Step3() { 18592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(test_view_->press_count(), 2); 18602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(bb_view_->GetMenu() == NULL); 18612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Done(); 18622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 18632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 18642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) class ContainerViewForMenuExit : public views::View { 18652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 18662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ContainerViewForMenuExit() { 18672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 18682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 18692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void Layout() OVERRIDE { 18702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK_EQ(2, child_count()); 18712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::View* bb_view = child_at(0); 18722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::View* test_view = child_at(1); 18732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const int width = bb_view->width(); 18742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const int height = bb_view->height(); 18752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bb_view->SetBounds(0,0, width - 22, height); 18762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) test_view->SetBounds(width - 20, 0, 20, height); 18772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 18782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 18792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 18802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 18812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(ContainerViewForMenuExit); 18822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 18832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 18842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) class TestViewForMenuExit : public views::View { 18852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 18862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestViewForMenuExit() : press_count_(0) { 18872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 18882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool OnMousePressed(const ui::MouseEvent& event) OVERRIDE { 18892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ++press_count_; 18902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 18912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 18922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int press_count() const { return press_count_; } 18932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 18942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 18952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int press_count_; 18962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 18972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TestViewForMenuExit); 18982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 18992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestViewForMenuExit* test_view_; 19012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 19022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#if defined(OS_LINUX) && !defined(OS_CHROMEOS) 19041e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// TODO(erg): linux_aura bringup: http://crbug.com/163931 19051e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#define MAYBE_ContextMenuExitTest DISABLED_ContextMenuExitTest 19064e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#else 19074e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#define MAYBE_ContextMenuExitTest ContextMenuExitTest 19084e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif 19092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)VIEW_TEST(BookmarkBarViewTest20, MAYBE_ContextMenuExitTest) 19112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Tests context menu by way of opening a context menu for a empty folder menu. 19132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// The opened context menu should behave as it is from the folder button. 19142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class BookmarkBarViewTest21 : public BookmarkBarViewEventTestBase { 19152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 19162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BookmarkBarViewTest21() 1917c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) : observer_(CreateEventTask(this, &BookmarkBarViewTest21::Step3)) { 19182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 19192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 19212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Move the mouse to the empty folder on the bookmark bar and press the 19222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // left mouse button. 1923c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void DoTestOnMessageLoop() OVERRIDE { 1924f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) views::LabelButton* button = GetBookmarkButton(5); 19252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress(button, ui_controls::LEFT, 19262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui_controls::DOWN | ui_controls::UP, 19272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest21::Step2)); 19282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 19292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 19312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Confirm that a menu for empty folder shows and right click the menu. 19322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void Step2() { 19332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Menu should be showing. 19342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::MenuItemView* menu = bb_view_->GetMenu(); 19352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(menu != NULL); 19362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::SubmenuView* submenu = menu->GetSubmenu(); 19382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(submenu->IsShowing()); 19392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(1, submenu->child_count()); 19402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::View* view = submenu->child_at(0); 19422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(view != NULL); 19432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(views::MenuItemView::kEmptyMenuItemViewID, view->id()); 19442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Right click on the first child to get its context menu. 19462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress(view, ui_controls::RIGHT, 19472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui_controls::DOWN | ui_controls::UP, base::Closure()); 19485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Step3 will be invoked by BookmarkContextMenuNotificationObserver. 19492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 19502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Confirm that context menu shows and click REMOVE menu. 19522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void Step3() { 19532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Make sure the context menu is showing. 19542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::MenuItemView* menu = bb_view_->GetContextMenu(); 19552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(menu != NULL); 19562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()); 19572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(menu->GetSubmenu()->IsShowing()); 19582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::MenuItemView* delete_menu = 19602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) menu->GetMenuItemByID(IDC_BOOKMARK_BAR_REMOVE); 19612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(delete_menu); 19622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Click on the delete menu item. 19642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui_test_utils::MoveMouseToCenterAndPress(delete_menu, 19652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui_controls::LEFT, ui_controls::DOWN | ui_controls::UP, 19662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateEventTask(this, &BookmarkBarViewTest21::Step4)); 19672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 19682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Confirm that the empty folder gets removed and menu doesn't show. 19702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void Step4() { 1971f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) views::LabelButton* button = GetBookmarkButton(5); 19722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(button); 1973f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("d"), button->GetText()); 19742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(bb_view_->GetContextMenu() == NULL); 19752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(bb_view_->GetMenu() == NULL); 19762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Done(); 19782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 19792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) BookmarkContextMenuNotificationObserver observer_; 19812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 19822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 19832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)VIEW_TEST(BookmarkBarViewTest21, ContextMenusForEmptyFolder) 1984