extension_loading_browsertest.cc revision 7dbb3d5cf0c15f500944d211057644d6a2f37371
1868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 2868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// found in the LICENSE file. 4868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// 5868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// This file contains tests for extension loading, reloading, and 6868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// unloading behavior. 7868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 8868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/run_loop.h" 97dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/strings/stringprintf.h" 10868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chrome/browser/extensions/extension_browsertest.h" 11868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chrome/browser/extensions/extension_service.h" 12868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chrome/browser/extensions/extension_system.h" 137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/extensions/test_extension_dir.h" 14868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chrome/browser/ui/tabs/tab_strip_model.h" 15868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chrome/test/base/in_process_browser_test.h" 16868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chrome/test/base/ui_test_utils.h" 17868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "net/test/embedded_test_server/embedded_test_server.h" 18868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h" 19868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 20868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)namespace extensions { 21868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)namespace { 22868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 23868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)class ExtensionLoadingTest : public ExtensionBrowserTest { 24868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}; 25868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 26868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Check the fix for http://crbug.com/178542. 27868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ExtensionLoadingTest, 28868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) UpgradeAfterNavigatingFromOverriddenNewTabPage) { 29868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) embedded_test_server()->ServeFilesFromDirectory( 30868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::FilePath(FILE_PATH_LITERAL("chrome/test/data"))); 31868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 32868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 33868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) TestExtensionDir extension_dir; 347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const char* manifest_template = 357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch "{" 367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch " \"name\": \"Overrides New Tab\"," 377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch " \"version\": \"%d\"," 387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch " \"description\": \"Overrides New Tab\"," 397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch " \"manifest_version\": 2," 407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch " \"background\": {" 417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch " \"persistent\": false," 427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch " \"scripts\": [\"event.js\"]" 437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch " }," 447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch " \"chrome_url_overrides\": {" 457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch " \"newtab\": \"newtab.html\"" 467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch " }" 477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch "}"; 487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch extension_dir.WriteManifest(base::StringPrintf(manifest_template, 1)); 49868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) extension_dir.WriteFile(FILE_PATH_LITERAL("event.js"), ""); 50868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) extension_dir.WriteFile(FILE_PATH_LITERAL("newtab.html"), 51868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) "<h1>Overridden New Tab Page</h1>"); 52868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 53868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const Extension* new_tab_extension = 54868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) InstallExtension(extension_dir.Pack(), 1 /*new install*/); 55868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ASSERT_TRUE(new_tab_extension); 56868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 57868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Visit the New Tab Page to get a renderer using the extension into history. 58868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), GURL("chrome://newtab")); 59868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 60868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Navigate that tab to a non-extension URL to swap out the extension's 61868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // renderer. 62868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const GURL test_link_from_NTP = 63868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) embedded_test_server()->GetURL("/README.chromium"); 64868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_THAT(test_link_from_NTP.spec(), testing::EndsWith("/README.chromium")) 65868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) << "Check that the test server started."; 66868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) NavigateInRenderer(browser()->tab_strip_model()->GetActiveWebContents(), 67868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) test_link_from_NTP); 68868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 69868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Increase the extension's version. 707dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch extension_dir.WriteManifest(base::StringPrintf(manifest_template, 2)); 71868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 72868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Upgrade the extension. 73868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) new_tab_extension = UpdateExtension( 74868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) new_tab_extension->id(), extension_dir.Pack(), 0 /*expected upgrade*/); 75868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_THAT(new_tab_extension->version()->components(), 76868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) testing::ElementsAre(2)); 77868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 78868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // The extension takes a couple round-trips to the renderer in order 79868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // to crash, so open a new tab to wait long enough. 80868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) AddTabAtIndex(browser()->tab_strip_model()->count(), 81868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) GURL("http://www.google.com/"), 82868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) content::PAGE_TRANSITION_TYPED); 83868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 84868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Check that the extension hasn't crashed. 85868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ExtensionService* service = 86868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ExtensionSystem::Get(profile())->extension_service(); 87868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(0U, service->terminated_extensions()->size()); 88868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(service->extensions()->Contains(new_tab_extension->id())); 89868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 90868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 91868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} // namespace 92868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} // namespace extensions 93