| Index: chrome/browser/extensions/active_script_controller_browsertest.cc
 | 
| diff --git a/chrome/browser/extensions/active_script_controller_browsertest.cc b/chrome/browser/extensions/active_script_controller_browsertest.cc
 | 
| index eea16bd545bd3f20fb2a0587f606228fa71e2b9c..e28bf6627dbf11cc000c50baf38ff38e6f98ad10 100644
 | 
| --- a/chrome/browser/extensions/active_script_controller_browsertest.cc
 | 
| +++ b/chrome/browser/extensions/active_script_controller_browsertest.cc
 | 
| @@ -8,6 +8,7 @@
 | 
|  #include "chrome/browser/extensions/active_script_controller.h"
 | 
|  #include "chrome/browser/extensions/extension_action.h"
 | 
|  #include "chrome/browser/extensions/extension_browsertest.h"
 | 
| +#include "chrome/browser/extensions/extension_util.h"
 | 
|  #include "chrome/browser/extensions/tab_helper.h"
 | 
|  #include "chrome/browser/extensions/test_extension_dir.h"
 | 
|  #include "chrome/browser/ui/browser.h"
 | 
| @@ -402,6 +403,59 @@ IN_PROC_BROWSER_TEST_F(ActiveScriptControllerBrowserTest,
 | 
|    inject_success_listener.WaitUntilSatisfied();
 | 
|  }
 | 
|  
 | 
| +// Test that granting the extension all urls permission allows it to run on
 | 
| +// pages, and that the permission update is sent to existing renderers.
 | 
| +IN_PROC_BROWSER_TEST_F(ActiveScriptControllerBrowserTest,
 | 
| +                       GrantExtensionAllUrlsPermission) {
 | 
| +
 | 
| +  // Loadup an extension and navigate.
 | 
| +  const Extension* extension = CreateExtension(ALL_HOSTS, CONTENT_SCRIPT);
 | 
| +  ASSERT_TRUE(extension);
 | 
| +
 | 
| +  content::WebContents* web_contents =
 | 
| +      browser()->tab_strip_model()->GetActiveWebContents();
 | 
| +  ASSERT_TRUE(web_contents);
 | 
| +  ActiveScriptController* active_script_controller =
 | 
| +      ActiveScriptController::GetForWebContents(web_contents);
 | 
| +  ASSERT_TRUE(active_script_controller);
 | 
| +
 | 
| +  ExtensionTestMessageListener inject_success_listener(
 | 
| +      new ExtensionTestMessageListener(kInjectSucceeded,
 | 
| +                                       false /* won't reply */));
 | 
| +  inject_success_listener.set_extension_id(extension->id());
 | 
| +
 | 
| +  ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
 | 
| +  GURL url = embedded_test_server()->GetURL("/extensions/test_file.html");
 | 
| +  ui_test_utils::NavigateToURL(browser(), url);
 | 
| +
 | 
| +  // The extension shouldn't be allowed to run.
 | 
| +  EXPECT_TRUE(active_script_controller->WantsToRun(extension));
 | 
| +  EXPECT_EQ(1, active_script_controller->num_page_requests());
 | 
| +  EXPECT_FALSE(inject_success_listener.was_satisfied());
 | 
| +
 | 
| +  // Enable the extension to run on all urls.
 | 
| +  util::SetAllowedScriptingOnAllUrls(extension->id(), profile(), true);
 | 
| +  EXPECT_TRUE(RunAllPendingInRenderer(web_contents));
 | 
| +
 | 
| +  // Navigate again - this time, the extension should execute immediately (and
 | 
| +  // should not need to ask the script controller for permission).
 | 
| +  ui_test_utils::NavigateToURL(browser(), url);
 | 
| +  EXPECT_FALSE(active_script_controller->WantsToRun(extension));
 | 
| +  EXPECT_EQ(0, active_script_controller->num_page_requests());
 | 
| +  EXPECT_TRUE(inject_success_listener.WaitUntilSatisfied());
 | 
| +
 | 
| +  // Revoke all urls permissions.
 | 
| +  inject_success_listener.Reset();
 | 
| +  util::SetAllowedScriptingOnAllUrls(extension->id(), profile(), false);
 | 
| +  EXPECT_TRUE(RunAllPendingInRenderer(web_contents));
 | 
| +
 | 
| +  // Re-navigate; the extension should again need permission to run.
 | 
| +  ui_test_utils::NavigateToURL(browser(), url);
 | 
| +  EXPECT_TRUE(active_script_controller->WantsToRun(extension));
 | 
| +  EXPECT_EQ(1, active_script_controller->num_page_requests());
 | 
| +  EXPECT_FALSE(inject_success_listener.was_satisfied());
 | 
| +}
 | 
| +
 | 
|  // A version of the test with the flag off, in order to test that everything
 | 
|  // still works as expected.
 | 
|  class FlagOffActiveScriptControllerBrowserTest
 | 
| 
 |