1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 2116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// found in the LICENSE file. 4116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/ui/views/extensions/extension_install_dialog_view.h" 61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/strings/utf_string_conversions.h" 8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/extensions/extension_browsertest.h" 9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/extensions/extension_icon_manager.h" 10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/extensions/extension_install_prompt.h" 11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/extensions/extension_install_prompt_experiment.h" 12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/ui/browser.h" 13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/ui/tabs/tab_strip_model.h" 14116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/ui/views/constrained_window_views.h" 15116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/ui/webui/extensions/extension_settings_handler.h" 16116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/common/extensions/extension_test_util.h" 17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "content/public/browser/browser_thread.h" 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "content/public/test/test_utils.h" 19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "extensions/common/extension.h" 20116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "extensions/common/permissions/permissions_data.h" 21116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "extensions/common/test_util.h" 22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/views/controls/scroll_view.h" 23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/views/view.h" 24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/views/widget/widget.h" 25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// A simple delegate implementation that counts the number of times 27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// |InstallUIProceed| and |InstallUIAbort| are called. 28116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass MockExtensionInstallPromptDelegate 29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch : public ExtensionInstallPrompt::Delegate { 30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public: 31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch MockExtensionInstallPromptDelegate() 32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch : proceed_count_(0), 33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch abort_count_(0) {} 34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // ExtensionInstallPrompt::Delegate overrides. 36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void InstallUIProceed() OVERRIDE; 37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void InstallUIAbort(bool user_initiated) OVERRIDE; 38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch int proceed_count() { return proceed_count_; } 40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch int abort_count() { return abort_count_; } 41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch protected: 43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch int proceed_count_; 44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch int abort_count_; 45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}; 46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 47116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid MockExtensionInstallPromptDelegate::InstallUIProceed() { 48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ++proceed_count_; 49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 51116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid MockExtensionInstallPromptDelegate::InstallUIAbort(bool user_initiated) { 52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ++abort_count_; 53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// This lets us construct the parent for the prompt we're constructing in our 56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// tests. 57116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass MockExtensionInstallPrompt : public ExtensionInstallPrompt { 58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public: 59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch explicit MockExtensionInstallPrompt(content::WebContents* web_contents) 60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch : ExtensionInstallPrompt(web_contents), prompt_(NULL) {} 61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual ~MockExtensionInstallPrompt() {} 62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void set_prompt(ExtensionInstallPrompt::Prompt* prompt) { 63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch prompt_ = prompt; 64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ExtensionInstallPrompt::Prompt* get_prompt() { 66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return prompt_; 67116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 68116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch private: 70116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ExtensionInstallPrompt::Prompt* prompt_; 71116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}; 72116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass ExtensionInstallDialogViewTestBase : public ExtensionBrowserTest { 74116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch protected: 751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci explicit ExtensionInstallDialogViewTestBase( 761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ExtensionInstallPrompt::PromptType prompt_type); 771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual ~ExtensionInstallDialogViewTestBase() {} 78116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 79116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void SetUpOnMainThread() OVERRIDE; 80116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ExtensionInstallPrompt::Prompt* prompt() { return prompt_.get(); } 821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::WebContents* web_contents() { return web_contents_; } 831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci MockExtensionInstallPromptDelegate* delegate() { return &delegate_; } 841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 85116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void SetPromptPermissions(std::vector<base::string16> permissions); 86116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void SetPromptDetails(std::vector<base::string16> details); 87116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void SetPromptRetainedFiles(std::vector<base::FilePath> files); 88116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 89116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch private: 90116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const extensions::Extension* extension_; 91116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch MockExtensionInstallPrompt* install_prompt_; 92116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_refptr<ExtensionInstallPrompt::Prompt> prompt_; 93116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch content::WebContents* web_contents_; 941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci MockExtensionInstallPromptDelegate delegate_; 951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DISALLOW_COPY_AND_ASSIGN(ExtensionInstallDialogViewTestBase); 97116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}; 98116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciExtensionInstallDialogViewTestBase::ExtensionInstallDialogViewTestBase( 1001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ExtensionInstallPrompt::PromptType prompt_type) 1011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci : extension_(NULL), 1021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci install_prompt_(NULL), 1031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci prompt_(new ExtensionInstallPrompt::Prompt(prompt_type)), 1041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci web_contents_(NULL) { 1051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 106116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid ExtensionInstallDialogViewTestBase::SetUpOnMainThread() { 108116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ExtensionBrowserTest::SetUpOnMainThread(); 1091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 110116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch extension_ = ExtensionBrowserTest::LoadExtension(test_data_dir_.AppendASCII( 111116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "install_prompt/permissions_scrollbar_regression")); 112116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 113116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch web_contents_ = browser()->tab_strip_model()->GetWebContentsAt(0); 114116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 115116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch install_prompt_ = new MockExtensionInstallPrompt(web_contents_); 1161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci install_prompt_->set_prompt(prompt_.get()); 117116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch prompt_->set_experiment(ExtensionInstallPromptExperiment::ControlGroup()); 118116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch prompt_->set_extension(extension_); 119116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 120116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_ptr<ExtensionIconManager> icon_manager(new ExtensionIconManager()); 121116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const SkBitmap icon_bitmap = icon_manager->GetIcon(extension_->id()); 122116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch gfx::Image icon = gfx::Image::CreateFrom1xBitmap(icon_bitmap); 123116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch prompt_->set_icon(icon); 124116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 125116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch this->SetPromptPermissions(std::vector<base::string16>()); 126116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch this->SetPromptDetails(std::vector<base::string16>()); 127116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch this->SetPromptRetainedFiles(std::vector<base::FilePath>()); 128116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 129116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid ExtensionInstallDialogViewTestBase::SetPromptPermissions( 131116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch std::vector<base::string16> permissions) { 1321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci prompt_->SetPermissions(permissions, 1331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ExtensionInstallPrompt::REGULAR_PERMISSIONS); 134116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 135116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid ExtensionInstallDialogViewTestBase::SetPromptDetails( 137116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch std::vector<base::string16> details) { 1381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci prompt_->SetPermissionsDetails(details, 1391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ExtensionInstallPrompt::REGULAR_PERMISSIONS); 140116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 141116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid ExtensionInstallDialogViewTestBase::SetPromptRetainedFiles( 143116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch std::vector<base::FilePath> files) { 144116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch prompt_->set_retained_files(files); 145116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 146116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass ScrollbarTest : public ExtensionInstallDialogViewTestBase { 1481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci protected: 1491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ScrollbarTest(); 1501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual ~ScrollbarTest() {} 1511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool IsScrollbarVisible(); 1531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private: 1551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DISALLOW_COPY_AND_ASSIGN(ScrollbarTest); 1561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}; 1571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciScrollbarTest::ScrollbarTest() 1591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci : ExtensionInstallDialogViewTestBase( 1601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ExtensionInstallPrompt::PERMISSIONS_PROMPT) { 1611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 163116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbool ScrollbarTest::IsScrollbarVisible() { 1641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ExtensionInstallPrompt::ShowParams show_params(web_contents()); 1651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ExtensionInstallDialogView* dialog = new ExtensionInstallDialogView( 1661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci show_params.navigator, delegate(), prompt()); 167116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 168116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Create the modal view around the install dialog view. 169116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch views::Widget* modal = 170116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch CreateBrowserModalDialogViews(dialog, show_params.parent_window); 171116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch modal->Show(); 1721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::RunAllBlockingPoolTasksUntilIdle(); 173116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 174116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Check if the vertical scrollbar is visible. 175116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return dialog->scroll_view()->vertical_scroll_bar()->visible(); 176116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 177116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 178116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Tests that a scrollbar _is_ shown for an excessively long extension 179116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// install prompt. 180116680a4aac90f2aa7413d9095a592090648e557Ben MurdochIN_PROC_BROWSER_TEST_F(ScrollbarTest, LongPromptScrollbar) { 181116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::string16 permission_string(base::ASCIIToUTF16("Test")); 182116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch std::vector<base::string16> permissions; 183116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch std::vector<base::string16> details; 184116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch for (int i = 0; i < 20; i++) { 185116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch permissions.push_back(permission_string); 186116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch details.push_back(base::string16()); 187116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 188116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch this->SetPromptPermissions(permissions); 189116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch this->SetPromptDetails(details); 190116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(IsScrollbarVisible()) << "Scrollbar is not visible"; 191116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 192116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 193116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Tests that a scrollbar isn't shown for this regression case. 194116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// See crbug.com/385570 for details. 195116680a4aac90f2aa7413d9095a592090648e557Ben MurdochIN_PROC_BROWSER_TEST_F(ScrollbarTest, ScrollbarRegression) { 196116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::string16 permission_string(base::ASCIIToUTF16( 197116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "Read and modify your data on *.facebook.com")); 198116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch std::vector<base::string16> permissions; 199116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch permissions.push_back(permission_string); 200116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch this->SetPromptPermissions(permissions); 201116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch std::vector<base::string16> details; 202116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch details.push_back(base::string16()); 203116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch this->SetPromptDetails(details); 204116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_FALSE(IsScrollbarVisible()) << "Scrollbar is visible"; 205116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 2061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass ExtensionInstallDialogViewTest 2081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci : public ExtensionInstallDialogViewTestBase { 2091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci protected: 2101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ExtensionInstallDialogViewTest() 2111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci : ExtensionInstallDialogViewTestBase( 2121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ExtensionInstallPrompt::INSTALL_PROMPT) {} 2131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual ~ExtensionInstallDialogViewTest() {} 2141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private: 2161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DISALLOW_COPY_AND_ASSIGN(ExtensionInstallDialogViewTest); 2171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}; 2181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Verifies that the delegate is notified when the user selects to accept or 2201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// cancel the install. 2211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciIN_PROC_BROWSER_TEST_F(ExtensionInstallDialogViewTest, NotifyDelegate) { 2221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { 2231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // The user confirms the install. 2241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci MockExtensionInstallPromptDelegate delegate; 2251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<ExtensionInstallDialogView> dialog( 2261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci new ExtensionInstallDialogView(web_contents(), &delegate, prompt())); 2271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci views::DialogDelegateView* delegate_view = dialog.get(); 2281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci delegate_view->Accept(); 2301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci delegate_view->OnClosed(); 2311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci dialog.reset(); 2321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, delegate.abort_count()); 2341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, delegate.proceed_count()); 2351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 2361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { 2381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // The user cancels the install. 2391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci MockExtensionInstallPromptDelegate delegate; 2401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<ExtensionInstallDialogView> dialog( 2411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci new ExtensionInstallDialogView(web_contents(), &delegate, prompt())); 2421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci views::DialogDelegateView* delegate_view = dialog.get(); 2431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci delegate_view->Cancel(); 2451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci delegate_view->OnClosed(); 2461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci dialog.reset(); 2471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, delegate.abort_count()); 2491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, delegate.proceed_count()); 2501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 2511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { 2531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Corner case: Dialog is closed without the user explicitly choosing to 2541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // proceed or cancel. 2551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci MockExtensionInstallPromptDelegate delegate; 2561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<ExtensionInstallDialogView> dialog( 2571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci new ExtensionInstallDialogView(web_contents(), &delegate, prompt())); 2581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci dialog.reset(); 2591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1, delegate.abort_count()); 2611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0, delegate.proceed_count()); 2621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 2631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 264