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) 55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/command_line.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/active_tab_permission_granter.h" 7f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/extensions/api/commands/command_service.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/browser_action_test_util.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_action.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_action_manager.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_apitest.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/tab_helper.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sessions/session_tab_helper.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/tabs/tab_strip_model.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/test/base/interactive_test_utils.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/ui_test_utils.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_service.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/browser_test_utils.h" 21f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "extensions/browser/extension_registry.h" 22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/common/extension.h" 23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/common/feature_switch.h" 24f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "extensions/common/manifest_constants.h" 25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/common/permissions/permissions_data.h" 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/test/result_catcher.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::WebContents; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extensions { 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 32f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)namespace { 33f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// This extension ID is used for tests require a stable ID over multiple 34f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// extension installs. 35f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)const char kId[] = "pgoakhfeplldmjheffidklpoklkppipp"; 36f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 37f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Default keybinding to use for emulating user-defined shortcut overrides. The 38f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// test extensions use Alt+Shift+F and Alt+Shift+H. 39f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)const char kAltShiftG[] = "Alt+Shift+G"; 40f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 41f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CommandsApiTest : public ExtensionApiTest { 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandsApiTest() {} 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~CommandsApiTest() {} 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserActionTestUtil GetBrowserActionsBar() { 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return BrowserActionTestUtil(browser()); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 51d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 52d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) bool IsGrantedForTab(const Extension* extension, 53d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) const content::WebContents* web_contents) { 5446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return extension->permissions_data()->HasAPIPermissionForTab( 5503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) SessionTabHelper::IdForTab(web_contents), APIPermission::kTab); 56d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if defined(OS_CHROMEOS) 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void RunChromeOSConversionTest(const std::string& extension_path) { 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Setup the environment. 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(test_server()->Start()); 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); 631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(RunExtensionTest(extension_path)) << message_; 641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui_test_utils::NavigateToURL( 651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci browser(), test_server()->GetURL("files/extensions/test_file.txt")); 661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ResultCatcher catcher; 681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Send all expected keys (Search+Shift+{Left, Up, Right, Down}). 701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(ui_test_utils::SendKeyPressSync( 711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci browser(), ui::VKEY_LEFT, false, true, false, true)); 721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(ui_test_utils::SendKeyPressSync( 731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci browser(), ui::VKEY_UP, false, true, false, true)); 741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(ui_test_utils::SendKeyPressSync( 751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci browser(), ui::VKEY_RIGHT, false, true, false, true)); 761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(ui_test_utils::SendKeyPressSync( 771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci browser(), ui::VKEY_DOWN, false, true, false, true)); 781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(catcher.GetNextResult()); 801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif // OS_CHROMEOS 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test the basic functionality of the Keybinding API: 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// - That pressing the shortcut keys should perform actions (activate the 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// browser action or send an event). 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// - Note: Page action keybindings are tested in PageAction test below. 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// - The shortcut keys taken by one extension are not overwritten by the last 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// installed extension. 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(CommandsApiTest, Basic) { 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(test_server()->Start()); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(RunExtensionTest("keybinding/basics")) << message_; 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Extension* extension = GetSingleLoadedExtension(); 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(extension) << message_; 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Load this extension, which uses the same keybindings but sets the page 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // to different colors. This is so we can see that it doesn't interfere. We 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // don't test this extension in any other way (it should otherwise be 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // immaterial to this test). 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(RunExtensionTest("keybinding/conflicting")) << message_; 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test that there are two browser actions in the toolbar. 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2, GetBrowserActionsBar().NumberOfBrowserActions()); 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_server()->GetURL("files/extensions/test_file.txt")); 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // activeTab shouldn't have been granted yet. 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* tab = browser()->tab_strip_model()->GetActiveWebContents(); 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(tab); 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 112d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) EXPECT_FALSE(IsGrantedForTab(extension, tab)); 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Activate the shortcut (Ctrl+Shift+F). 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(ui_test_utils::SendKeyPressSync( 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser(), ui::VKEY_F, true, true, false, false)); 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // activeTab should now be granted. 119d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) EXPECT_TRUE(IsGrantedForTab(extension, tab)); 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify the command worked. 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool result = false; 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tab, 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "setInterval(function(){" 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " if(document.body.bgColor == 'red'){" 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " window.domAutomationController.send(true)}}, 100)", 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &result)); 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result); 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Activate the shortcut (Ctrl+Shift+Y). 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(ui_test_utils::SendKeyPressSync( 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser(), ui::VKEY_Y, true, true, false, false)); 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) result = false; 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tab, 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "setInterval(function(){" 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " if(document.body.bgColor == 'blue'){" 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " window.domAutomationController.send(true)}}, 100)", 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &result)); 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result); 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Flaky on linux and chromeos, http://crbug.com/165825 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_MACOSX) || defined(OS_WIN) 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define MAYBE_PageAction PageAction 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define MAYBE_PageAction DISABLED_PageAction 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(CommandsApiTest, MAYBE_PageAction) { 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(test_server()->Start()); 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(RunExtensionTest("keybinding/page_action")) << message_; 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Extension* extension = GetSingleLoadedExtension(); 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(extension) << message_; 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Load a page, the extension will detect the navigation and request to show 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the page action icon. 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ResultCatcher catcher; 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_server()->GetURL("files/extensions/test_file.txt")); 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(catcher.GetNextResult()); 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure it appears and is the right one. 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(WaitForPageActionVisibilityChangeTo(1)); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int tab_id = SessionTabHelper::FromWebContents( 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents())->session_id().id(); 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionAction* action = 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionActionManager::Get(browser()->profile())-> 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetPageAction(*extension); 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(action); 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("Make this page red", action->GetTitle(tab_id)); 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Activate the shortcut (Alt+Shift+F). 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(ui_test_utils::SendKeyPressSync( 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser(), ui::VKEY_F, false, true, true, false)); 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify the command worked (the page action turns the page red). 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* tab = browser()->tab_strip_model()->GetActiveWebContents(); 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool result = false; 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) tab, 1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "setInterval(function(){" 1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " if(document.body.bgColor == 'red'){" 1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) " window.domAutomationController.send(true)}}, 100)", 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &result)); 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(result); 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This test validates that the getAll query API function returns registered 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// commands as well as synthesized ones and that inactive commands (like the 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// synthesized ones are in nature) have no shortcuts. 195cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(CommandsApiTest, SynthesizedCommand) { 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(test_server()->Start()); 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(RunExtensionTest("keybinding/synthesized")) << message_; 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 200c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// This test validates that an extension cannot request a shortcut that is 201c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// already in use by Chrome. 202cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(CommandsApiTest, DontOverwriteSystemShortcuts) { 203c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(test_server()->Start()); 204c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 205c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); 206c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 207c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(RunExtensionTest("keybinding/dont_overwrite_system")) << message_; 208c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 209c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ui_test_utils::NavigateToURL(browser(), 210c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test_server()->GetURL("files/extensions/test_file.txt")); 211c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 212c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) WebContents* tab = browser()->tab_strip_model()->GetActiveWebContents(); 213c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(tab); 214c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Activate the shortcut (Alt+Shift+F) to make the page blue. 216c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { 217c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ResultCatcher catcher; 218c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(ui_test_utils::SendKeyPressSync( 219c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) browser(), ui::VKEY_F, false, true, true, false)); 220c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(catcher.GetNextResult()); 221c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 222c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 223c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool result = false; 224c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 225c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) tab, 226c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "setInterval(function() {" 227c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " if (document.body.bgColor == 'blue') {" 228c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " window.domAutomationController.send(true)}}, 100)", 229c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &result)); 230c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(result); 231c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Activate the bookmark shortcut (Ctrl+D) to make the page green (should not 2335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // work without requesting via chrome_settings_overrides). 2345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#if defined(OS_MACOSX) 2355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_TRUE(ui_test_utils::SendKeyPressSync( 2365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) browser(), ui::VKEY_D, false, false, false, true)); 2375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#else 2385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_TRUE(ui_test_utils::SendKeyPressSync( 2395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) browser(), ui::VKEY_D, true, false, false, false)); 2405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif 2415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // The page should still be blue. 2435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) result = false; 2445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 2455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) tab, 2465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "setInterval(function() {" 2475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " if (document.body.bgColor == 'blue') {" 2485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " window.domAutomationController.send(true)}}, 100)", 2495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) &result)); 2505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_TRUE(result); 2515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Activate the shortcut (Ctrl+F) to make the page red (should not work). 253c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(ui_test_utils::SendKeyPressSync( 254c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) browser(), ui::VKEY_F, true, false, false, false)); 255c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 256c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // The page should still be blue. 257c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) result = false; 258c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 259c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) tab, 260c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "setInterval(function() {" 261c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " if (document.body.bgColor == 'blue') {" 262c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) " window.domAutomationController.send(true)}}, 100)", 263c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &result)); 264c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(result); 265c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 266c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// This test validates that an extension can override the Chrome bookmark 2685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// shortcut if it has requested to do so. 2695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(CommandsApiTest, OverwriteBookmarkShortcut) { 2705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_TRUE(test_server()->Start()); 2715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); 2735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // This functionality requires a feature flag. 2755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CommandLine::ForCurrentProcess()->AppendSwitchASCII( 2765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "--enable-override-bookmarks-ui", 2775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "1"); 2785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_TRUE(RunExtensionTest("keybinding/overwrite_bookmark_shortcut")) 2805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) << message_; 2815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), 2835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) test_server()->GetURL("files/extensions/test_file.txt")); 2845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) WebContents* tab = browser()->tab_strip_model()->GetActiveWebContents(); 2865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_TRUE(tab); 2875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Activate the shortcut (Ctrl+D) to make the page green. 2895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) { 2905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ResultCatcher catcher; 2915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#if defined(OS_MACOSX) 2925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_TRUE(ui_test_utils::SendKeyPressSync( 2935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) browser(), ui::VKEY_D, false, false, false, true)); 2945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#else 2955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_TRUE(ui_test_utils::SendKeyPressSync( 2965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) browser(), ui::VKEY_D, true, false, false, false)); 2975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif 2985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_TRUE(catcher.GetNextResult()); 2995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 3005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool result = false; 3025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 3035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) tab, 3045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "setInterval(function() {" 3055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " if (document.body.bgColor == 'green') {" 3065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " window.domAutomationController.send(true)}}, 100)", 3075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) &result)); 3085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_TRUE(result); 3095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 3105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 311116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// This test validates that an extension override of the Chrome bookmark 312116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// shortcut does not supersede the same keybinding by web pages. 313116680a4aac90f2aa7413d9095a592090648e557Ben MurdochIN_PROC_BROWSER_TEST_F(CommandsApiTest, 314116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch OverwriteBookmarkShortcutDoesNotOverrideWebKeybinding) { 315116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(test_server()->Start()); 316116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 317116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); 318116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 319116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // This functionality requires a feature flag. 320116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch CommandLine::ForCurrentProcess()->AppendSwitchASCII( 321116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "--enable-override-bookmarks-ui", 322116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "1"); 323116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 324116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(RunExtensionTest("keybinding/overwrite_bookmark_shortcut")) 325116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch << message_; 326116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 327116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ui_test_utils::NavigateToURL(browser(), 328116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch test_server()->GetURL( 329116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "files/extensions/test_file_with_ctrl-d_keybinding.html")); 330116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 331116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch WebContents* tab = browser()->tab_strip_model()->GetActiveWebContents(); 332116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(tab); 333116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 334116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Activate the shortcut (Ctrl+D) which should be handled by the page and make 335116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // the background color magenta. 336116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(OS_MACOSX) 337116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(ui_test_utils::SendKeyPressSync( 338116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch browser(), ui::VKEY_D, false, false, false, true)); 339116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 340116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(ui_test_utils::SendKeyPressSync( 341116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch browser(), ui::VKEY_D, true, false, false, false)); 342116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 343116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 344116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool result = false; 345116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 346116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch tab, 347116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "setInterval(function() {" 348116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch " if (document.body.bgColor == 'magenta') {" 349116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch " window.domAutomationController.send(true)}}, 100)", 350116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch &result)); 351116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(result); 352116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 353116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 354116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// This test validates that user-set override of the Chrome bookmark shortcut in 355116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// an extension that does not request it does supersede the same keybinding by 356116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// web pages. 357116680a4aac90f2aa7413d9095a592090648e557Ben MurdochIN_PROC_BROWSER_TEST_F(CommandsApiTest, 358116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch OverwriteBookmarkShortcutByUserOverridesWebKeybinding) { 359116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(test_server()->Start()); 360116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 361116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); 362116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 363116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // This functionality requires a feature flag. 364116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch CommandLine::ForCurrentProcess()->AppendSwitchASCII( 365116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "--enable-override-bookmarks-ui", 366116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "1"); 367116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 368116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(RunExtensionTest("keybinding/basics")) 369116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch << message_; 370116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 371116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch CommandService* command_service = CommandService::Get(browser()->profile()); 372116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 373116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const Extension* extension = GetSingleLoadedExtension(); 374116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Simulate the user setting the keybinding to Ctrl+D. 375116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(OS_MACOSX) 376116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const char* hotkey = "Command+D"; 377116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 378116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const char* hotkey = "Ctrl+D"; 379116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif // defined(OS_MACOSX) 380116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch command_service->UpdateKeybindingPrefs( 381116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch extension->id(), manifest_values::kBrowserActionCommandEvent, hotkey); 382116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 383116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ui_test_utils::NavigateToURL(browser(), 384116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch test_server()->GetURL( 385116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "files/extensions/test_file_with_ctrl-d_keybinding.html")); 386116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 387116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch WebContents* tab = browser()->tab_strip_model()->GetActiveWebContents(); 388116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(tab); 389116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 390116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Activate the shortcut (Ctrl+D) which should be handled by the extension and 391116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // make the background color red. 392116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(OS_MACOSX) 393116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(ui_test_utils::SendKeyPressSync( 394116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch browser(), ui::VKEY_D, false, false, false, true)); 395116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 396116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(ui_test_utils::SendKeyPressSync( 397116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch browser(), ui::VKEY_D, true, false, false, false)); 398116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 399116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 400116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool result = false; 401116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(content::ExecuteScriptAndExtractBool( 402116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch tab, 403116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "setInterval(function() {" 404116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch " if (document.body.bgColor == 'red') {" 405116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch " window.domAutomationController.send(true)}}, 100)", 406116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch &result)); 407116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(result); 408116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 409116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 410f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#if defined(OS_WIN) 411f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Currently this feature is implemented on Windows only. 412f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define MAYBE_AllowDuplicatedMediaKeys AllowDuplicatedMediaKeys 413f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#else 414f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define MAYBE_AllowDuplicatedMediaKeys DISABLED_AllowDuplicatedMediaKeys 415f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif 416f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 417f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Test that media keys go to all extensions that register for them. 418f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(CommandsApiTest, MAYBE_AllowDuplicatedMediaKeys) { 419f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ResultCatcher catcher; 420f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(RunExtensionTest("keybinding/non_global_media_keys_0")) 421f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) << message_; 422f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(catcher.GetNextResult()); 423f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(RunExtensionTest("keybinding/non_global_media_keys_1")) 424f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) << message_; 425f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(catcher.GetNextResult()); 426f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 427f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Activate the Media Stop key. 428f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(ui_test_utils::SendKeyPressSync( 429f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) browser(), ui::VKEY_MEDIA_STOP, false, false, false, false)); 430f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 431f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // We should get two success result. 432f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(catcher.GetNextResult()); 433f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(catcher.GetNextResult()); 434f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 435f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 436f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(CommandsApiTest, ShortcutAddedOnUpdate) { 437f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::ScopedTempDir scoped_temp_dir; 438f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(scoped_temp_dir.CreateUniqueTempDir()); 439f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::FilePath pem_path = test_data_dir_. 440f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) AppendASCII("keybinding").AppendASCII("keybinding.pem"); 441f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::FilePath path_v1_unassigned = PackExtensionWithOptions( 442f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) test_data_dir_.AppendASCII("keybinding").AppendASCII("update") 443f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) .AppendASCII("v1_unassigned"), 444f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_temp_dir.path().AppendASCII("v1_unassigned.crx"), 445f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) pem_path, 446f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::FilePath()); 447f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::FilePath path_v2 = PackExtensionWithOptions( 448f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) test_data_dir_.AppendASCII("keybinding").AppendASCII("update") 449f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) .AppendASCII("v2"), 450f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_temp_dir.path().AppendASCII("v2.crx"), 451f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) pem_path, 452f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::FilePath()); 453f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 454f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ExtensionRegistry* registry = ExtensionRegistry::Get(browser()->profile()); 455f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) CommandService* command_service = CommandService::Get(browser()->profile()); 456f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 457f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Install v1 of the extension without keybinding assigned. 458f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_TRUE(InstallExtension(path_v1_unassigned, 1)); 459f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(registry->GetExtensionById(kId, ExtensionRegistry::ENABLED) != 460f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) NULL); 461f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 462f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Verify it is set to nothing. 463f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ui::Accelerator accelerator = command_service->FindCommandByName( 464f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) kId, manifest_values::kBrowserActionCommandEvent).accelerator(); 465f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(ui::VKEY_UNKNOWN, accelerator.key_code()); 466f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 467f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Update to version 2 with keybinding. 468f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(UpdateExtension(kId, path_v2, 0)); 469f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(registry->GetExtensionById(kId, ExtensionRegistry::ENABLED) != 470f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) NULL); 471f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 472f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Verify it has a command of Alt+Shift+F. 473f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) accelerator = command_service->FindCommandByName( 474f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) kId, manifest_values::kBrowserActionCommandEvent).accelerator(); 475f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(ui::VKEY_F, accelerator.key_code()); 476f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_FALSE(accelerator.IsCtrlDown()); 477f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(accelerator.IsShiftDown()); 478f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(accelerator.IsAltDown()); 479f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 480f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 481f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(CommandsApiTest, ShortcutChangedOnUpdate) { 482f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::ScopedTempDir scoped_temp_dir; 483f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(scoped_temp_dir.CreateUniqueTempDir()); 484f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::FilePath pem_path = test_data_dir_. 485f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) AppendASCII("keybinding").AppendASCII("keybinding.pem"); 486f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::FilePath path_v1 = PackExtensionWithOptions( 487f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) test_data_dir_.AppendASCII("keybinding").AppendASCII("update") 488f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) .AppendASCII("v1"), 489f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_temp_dir.path().AppendASCII("v1.crx"), 490f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) pem_path, 491f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::FilePath()); 492f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::FilePath path_v2_reassigned = PackExtensionWithOptions( 493f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) test_data_dir_.AppendASCII("keybinding").AppendASCII("update") 494f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) .AppendASCII("v2_reassigned"), 495f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_temp_dir.path().AppendASCII("v2_reassigned.crx"), 496f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) pem_path, 497f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::FilePath()); 498f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 499f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ExtensionRegistry* registry = ExtensionRegistry::Get(browser()->profile()); 500f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) CommandService* command_service = CommandService::Get(browser()->profile()); 501f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 502f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Install v1 of the extension. 503f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_TRUE(InstallExtension(path_v1, 1)); 504f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(registry->GetExtensionById(kId, ExtensionRegistry::ENABLED) != 505f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) NULL); 506f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 507f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Verify it has a command of Alt+Shift+F. 508f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ui::Accelerator accelerator = command_service->FindCommandByName( 509f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) kId, manifest_values::kBrowserActionCommandEvent).accelerator(); 510f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(ui::VKEY_F, accelerator.key_code()); 511f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_FALSE(accelerator.IsCtrlDown()); 512f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(accelerator.IsShiftDown()); 513f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(accelerator.IsAltDown()); 514f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 515f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Update to version 2 with different keybinding assigned. 516f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(UpdateExtension(kId, path_v2_reassigned, 0)); 517f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(registry->GetExtensionById(kId, ExtensionRegistry::ENABLED) != 518f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) NULL); 519f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 520f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Verify it has a command of Alt+Shift+H. 521f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) accelerator = command_service->FindCommandByName( 522f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) kId, manifest_values::kBrowserActionCommandEvent).accelerator(); 523f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(ui::VKEY_H, accelerator.key_code()); 524f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_FALSE(accelerator.IsCtrlDown()); 525f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(accelerator.IsShiftDown()); 526f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(accelerator.IsAltDown()); 527f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 528f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 529f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(CommandsApiTest, ShortcutRemovedOnUpdate) { 530f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::ScopedTempDir scoped_temp_dir; 531f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(scoped_temp_dir.CreateUniqueTempDir()); 532f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::FilePath pem_path = test_data_dir_. 533f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) AppendASCII("keybinding").AppendASCII("keybinding.pem"); 534f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::FilePath path_v1 = PackExtensionWithOptions( 535f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) test_data_dir_.AppendASCII("keybinding").AppendASCII("update") 536f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) .AppendASCII("v1"), 537f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_temp_dir.path().AppendASCII("v1.crx"), 538f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) pem_path, 539f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::FilePath()); 540f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::FilePath path_v2_unassigned = PackExtensionWithOptions( 541f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) test_data_dir_.AppendASCII("keybinding").AppendASCII("update") 542f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) .AppendASCII("v2_unassigned"), 543f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_temp_dir.path().AppendASCII("v2_unassigned.crx"), 544f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) pem_path, 545f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::FilePath()); 546f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 547f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ExtensionRegistry* registry = ExtensionRegistry::Get(browser()->profile()); 548f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) CommandService* command_service = CommandService::Get(browser()->profile()); 549f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 550f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Install v1 of the extension. 551f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_TRUE(InstallExtension(path_v1, 1)); 552f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(registry->GetExtensionById(kId, ExtensionRegistry::ENABLED) != 553f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) NULL); 554f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 555f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Verify it has a command of Alt+Shift+F. 556f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ui::Accelerator accelerator = command_service->FindCommandByName( 557f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) kId, manifest_values::kBrowserActionCommandEvent).accelerator(); 558f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(ui::VKEY_F, accelerator.key_code()); 559f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_FALSE(accelerator.IsCtrlDown()); 560f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(accelerator.IsShiftDown()); 561f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(accelerator.IsAltDown()); 562f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 563f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Update to version 2 without keybinding assigned. 564f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(UpdateExtension(kId, path_v2_unassigned, 0)); 565f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(registry->GetExtensionById(kId, ExtensionRegistry::ENABLED) != 566f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) NULL); 567f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 568f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Verify the keybinding gets set to nothing. 569f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) accelerator = command_service->FindCommandByName( 570f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) kId, manifest_values::kBrowserActionCommandEvent).accelerator(); 571f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(ui::VKEY_UNKNOWN, accelerator.key_code()); 572f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 573f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 574f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(CommandsApiTest, 575f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ShortcutAddedOnUpdateAfterBeingAssignedByUser) { 576f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::ScopedTempDir scoped_temp_dir; 577f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(scoped_temp_dir.CreateUniqueTempDir()); 578f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::FilePath pem_path = test_data_dir_. 579f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) AppendASCII("keybinding").AppendASCII("keybinding.pem"); 580f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::FilePath path_v1_unassigned = PackExtensionWithOptions( 581f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) test_data_dir_.AppendASCII("keybinding").AppendASCII("update") 582f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) .AppendASCII("v1_unassigned"), 583f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_temp_dir.path().AppendASCII("v1_unassigned.crx"), 584f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) pem_path, 585f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::FilePath()); 586f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::FilePath path_v2 = PackExtensionWithOptions( 587f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) test_data_dir_.AppendASCII("keybinding").AppendASCII("update") 588f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) .AppendASCII("v2"), 589f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_temp_dir.path().AppendASCII("v2.crx"), 590f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) pem_path, 591f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::FilePath()); 592f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 593f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ExtensionRegistry* registry = ExtensionRegistry::Get(browser()->profile()); 594f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) CommandService* command_service = CommandService::Get(browser()->profile()); 595f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 596f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Install v1 of the extension without keybinding assigned. 597f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_TRUE(InstallExtension(path_v1_unassigned, 1)); 598f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(registry->GetExtensionById(kId, ExtensionRegistry::ENABLED) != 599f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) NULL); 600f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 601f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Verify it is set to nothing. 602f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ui::Accelerator accelerator = command_service->FindCommandByName( 603f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) kId, manifest_values::kBrowserActionCommandEvent).accelerator(); 604f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(ui::VKEY_UNKNOWN, accelerator.key_code()); 605f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 606f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Simulate the user setting the keybinding to Alt+Shift+G. 607f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) command_service->UpdateKeybindingPrefs( 608f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) kId, manifest_values::kBrowserActionCommandEvent, kAltShiftG); 609f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 610f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Update to version 2 with keybinding. 611f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(UpdateExtension(kId, path_v2, 0)); 612f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(registry->GetExtensionById(kId, ExtensionRegistry::ENABLED) != 613f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) NULL); 614f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 615f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Verify the previously-set keybinding is still set. 616f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) accelerator = command_service->FindCommandByName( 617f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) kId, manifest_values::kBrowserActionCommandEvent).accelerator(); 618f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(ui::VKEY_G, accelerator.key_code()); 619f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_FALSE(accelerator.IsCtrlDown()); 620f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(accelerator.IsShiftDown()); 621f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(accelerator.IsAltDown()); 622f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 623f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 624f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(CommandsApiTest, 625f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ShortcutChangedOnUpdateAfterBeingReassignedByUser) { 626f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::ScopedTempDir scoped_temp_dir; 627f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(scoped_temp_dir.CreateUniqueTempDir()); 628f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::FilePath pem_path = test_data_dir_. 629f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) AppendASCII("keybinding").AppendASCII("keybinding.pem"); 630f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::FilePath path_v1 = PackExtensionWithOptions( 631f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) test_data_dir_.AppendASCII("keybinding").AppendASCII("update") 632f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) .AppendASCII("v1"), 633f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_temp_dir.path().AppendASCII("v1.crx"), 634f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) pem_path, 635f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::FilePath()); 636f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::FilePath path_v2_reassigned = PackExtensionWithOptions( 637f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) test_data_dir_.AppendASCII("keybinding").AppendASCII("update") 638f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) .AppendASCII("v2_reassigned"), 639f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_temp_dir.path().AppendASCII("v2_reassigned.crx"), 640f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) pem_path, 641f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::FilePath()); 642f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 643f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ExtensionRegistry* registry = ExtensionRegistry::Get(browser()->profile()); 644f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) CommandService* command_service = CommandService::Get(browser()->profile()); 645f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 646f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Install v1 of the extension. 647f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_TRUE(InstallExtension(path_v1, 1)); 648f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(registry->GetExtensionById(kId, ExtensionRegistry::ENABLED) != 649f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) NULL); 650f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 651f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Verify it has a command of Alt+Shift+F. 652f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ui::Accelerator accelerator = command_service->FindCommandByName( 653f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) kId, manifest_values::kBrowserActionCommandEvent).accelerator(); 654f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(ui::VKEY_F, accelerator.key_code()); 655f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_FALSE(accelerator.IsCtrlDown()); 656f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(accelerator.IsShiftDown()); 657f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(accelerator.IsAltDown()); 658f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 659f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Simulate the user setting the keybinding to Alt+Shift+G. 660f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) command_service->UpdateKeybindingPrefs( 661f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) kId, manifest_values::kBrowserActionCommandEvent, kAltShiftG); 662f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 663f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Update to version 2 with different keybinding assigned. 664f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(UpdateExtension(kId, path_v2_reassigned, 0)); 665f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(registry->GetExtensionById(kId, ExtensionRegistry::ENABLED) != 666f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) NULL); 667f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 668f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Verify it has a command of Alt+Shift+G. 669f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) accelerator = command_service->FindCommandByName( 670f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) kId, manifest_values::kBrowserActionCommandEvent).accelerator(); 671f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(ui::VKEY_G, accelerator.key_code()); 672f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_FALSE(accelerator.IsCtrlDown()); 673f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(accelerator.IsShiftDown()); 674f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(accelerator.IsAltDown()); 675f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 676f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 677f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(CommandsApiTest, 678f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ShortcutRemovedOnUpdateAfterBeingReassignedByUser) { 679f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::ScopedTempDir scoped_temp_dir; 680f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(scoped_temp_dir.CreateUniqueTempDir()); 681f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::FilePath pem_path = test_data_dir_. 682f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) AppendASCII("keybinding").AppendASCII("keybinding.pem"); 683f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::FilePath path_v1 = PackExtensionWithOptions( 684f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) test_data_dir_.AppendASCII("keybinding").AppendASCII("update") 685f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) .AppendASCII("v1"), 686f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_temp_dir.path().AppendASCII("v1.crx"), 687f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) pem_path, 688f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::FilePath()); 689f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::FilePath path_v2_unassigned = PackExtensionWithOptions( 690f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) test_data_dir_.AppendASCII("keybinding").AppendASCII("update") 691f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) .AppendASCII("v2_unassigned"), 692f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_temp_dir.path().AppendASCII("v2_unassigned.crx"), 693f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) pem_path, 694f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::FilePath()); 695f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 696f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ExtensionRegistry* registry = ExtensionRegistry::Get(browser()->profile()); 697f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) CommandService* command_service = CommandService::Get(browser()->profile()); 698f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 699f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Install v1 of the extension. 700f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_TRUE(InstallExtension(path_v1, 1)); 701f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(registry->GetExtensionById(kId, ExtensionRegistry::ENABLED) != 702f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) NULL); 703f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 704f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Verify it has a command of Alt+Shift+F. 705f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ui::Accelerator accelerator = command_service->FindCommandByName( 706f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) kId, manifest_values::kBrowserActionCommandEvent).accelerator(); 707f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(ui::VKEY_F, accelerator.key_code()); 708f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_FALSE(accelerator.IsCtrlDown()); 709f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(accelerator.IsShiftDown()); 710f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(accelerator.IsAltDown()); 711f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 712f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Simulate the user reassigning the keybinding to Alt+Shift+G. 713f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) command_service->UpdateKeybindingPrefs( 714f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) kId, manifest_values::kBrowserActionCommandEvent, kAltShiftG); 715f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 716f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Update to version 2 without keybinding assigned. 717f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(UpdateExtension(kId, path_v2_unassigned, 0)); 718f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(registry->GetExtensionById(kId, ExtensionRegistry::ENABLED) != 719f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) NULL); 720f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 721f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Verify the keybinding is still set. 722f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) accelerator = command_service->FindCommandByName( 723f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) kId, manifest_values::kBrowserActionCommandEvent).accelerator(); 724f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(ui::VKEY_G, accelerator.key_code()); 725f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_FALSE(accelerator.IsCtrlDown()); 726f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(accelerator.IsShiftDown()); 727f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(accelerator.IsAltDown()); 728f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 729f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 7301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// 7311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if defined(OS_CHROMEOS) && !defined(NDEBUG) 7321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// TODO(dtseng): Test times out on Chrome OS debug. See http://crbug.com/412456. 7331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#define MAYBE_ContinuePropagation DISABLED_ContinuePropagation 7341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#else 7351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#define MAYBE_ContinuePropagation ContinuePropagation 7361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif 7371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 7381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciIN_PROC_BROWSER_TEST_F(CommandsApiTest, MAYBE_ContinuePropagation) { 7391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Setup the environment. 7401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(test_server()->Start()); 7411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); 7421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(RunExtensionTest("keybinding/continue_propagation")) << message_; 7431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui_test_utils::NavigateToURL( 7441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci browser(), test_server()->GetURL("files/extensions/test_file.txt")); 7451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 7461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ResultCatcher catcher; 7471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 7481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Activate the shortcut (Ctrl+Shift+F). The page should capture the 7491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // keystroke and not the extension since |onCommand| has no event listener 7501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // initially. 7511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(ui_test_utils::SendKeyPressSync( 7521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci browser(), ui::VKEY_F, true, true, false, false)); 7531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(catcher.GetNextResult()); 7541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 7551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Now, the extension should have added an |onCommand| event listener. 7561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Send the same key, but the |onCommand| listener should now receive it. 7571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(ui_test_utils::SendKeyPressSync( 7581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci browser(), ui::VKEY_F, true, true, false, false)); 7591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(catcher.GetNextResult()); 7601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 7611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // The extension should now have removed its |onCommand| event listener. 7621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Finally, the page should again receive the key. 7631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(ui_test_utils::SendKeyPressSync( 7641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci browser(), ui::VKEY_F, true, true, false, false)); 7651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(catcher.GetNextResult()); 7661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 7671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 7681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Test is only applicable on Chrome OS. 7691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if defined(OS_CHROMEOS) 7701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// http://crbug.com/410534 7711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if defined(USE_OZONE) 7721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#define MAYBE_ChromeOSConversions DISABLED_ChromeOSConversions 7731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#else 7741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#define MAYBE_ChromeOSConversions ChromeOSConversions 7751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif 7761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciIN_PROC_BROWSER_TEST_F(CommandsApiTest, MAYBE_ChromeOSConversions) { 7771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci RunChromeOSConversionTest("keybinding/chromeos_conversions"); 7781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 7791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif // OS_CHROMEOS 7801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 781a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} // namespace extensions 782