15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 25f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// found in the LICENSE file. 45f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 56e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "base/files/file_path.h" 66e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "base/strings/stringprintf.h" 75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/extensions/extension_apitest.h" 86e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chrome/test/base/ui_test_utils.h" 95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "extensions/common/feature_switch.h" 105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "extensions/common/switches.h" 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/test/result_catcher.h" 125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)using extensions::Extension; 145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)using extensions::FeatureSwitch; 155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class ExtensionOptionsApiTest : public ExtensionApiTest { 175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) private: 185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { 196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ExtensionApiTest::SetUpCommandLine(command_line); 206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) enable_options_.reset(new FeatureSwitch::ScopedOverride( 226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) FeatureSwitch::embedded_extension_options(), true)); 235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Need to add a command line flag as well as a FeatureSwitch because the 245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // FeatureSwitch is not copied over to the renderer process from the 255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // browser process. 265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) command_line->AppendSwitch( 275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) extensions::switches::kEnableEmbeddedExtensionOptions); 285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) scoped_ptr<FeatureSwitch::ScopedOverride> enable_options_; 315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}; 325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// crbug/415949. 341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if defined(OS_MACOSX) 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#define MAYBE_ExtensionCanEmbedOwnOptions DISABLED_ExtensionCanEmbedOwnOptions 361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#else 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#define MAYBE_ExtensionCanEmbedOwnOptions ExtensionCanEmbedOwnOptions 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciIN_PROC_BROWSER_TEST_F(ExtensionOptionsApiTest, 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci MAYBE_ExtensionCanEmbedOwnOptions) { 416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) base::FilePath extension_dir = 426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) test_data_dir_.AppendASCII("extension_options").AppendASCII("embed_self"); 4303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) ASSERT_TRUE(LoadExtension(extension_dir)); 445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_TRUE(RunExtensionSubtest("extension_options/embed_self", "test.html")); 455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ExtensionOptionsApiTest, 486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ShouldNotEmbedOtherExtensionsOptions) { 496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) base::FilePath dir = test_data_dir_.AppendASCII("extension_options") 506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) .AppendASCII("embed_other"); 516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const Extension* embedder = InstallExtension(dir.AppendASCII("embedder"), 1); 536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const Extension* embedded = InstallExtension(dir.AppendASCII("embedded"), 1); 546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ASSERT_TRUE(embedder); 566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ASSERT_TRUE(embedded); 576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Since the extension id of the embedded extension is not always the same, 596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // store the embedded extension id in the embedder's storage before running 606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // the tests. 616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) std::string script = base::StringPrintf( 626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "chrome.storage.local.set({'embeddedId': '%s'}, function() {" 636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "window.domAutomationController.send('done injecting');});", 646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) embedded->id().c_str()); 656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ExecuteScriptInBackgroundPage(embedder->id(), script); 671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci extensions::ResultCatcher catcher; 686e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), 696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) embedder->GetResourceURL("test.html")); 706e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ASSERT_TRUE(catcher.GetNextResult()); 716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 726e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ExtensionOptionsApiTest, 746e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) CannotEmbedUsingInvalidExtensionIds) { 756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ASSERT_TRUE(InstallExtension(test_data_dir_.AppendASCII("extension_options") 766e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) .AppendASCII("embed_invalid"), 776e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1)); 786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ASSERT_TRUE( 796e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) RunExtensionSubtest("extension_options/embed_invalid", "test.html")); 806e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 81