| Index: chrome/browser/apps/web_view_browsertest.cc
|
| diff --git a/chrome/browser/apps/web_view_browsertest.cc b/chrome/browser/apps/web_view_browsertest.cc
|
| index a675099c084a9b239353b487433a0424b0999424..6b1d1b5413ebd3e34b0947ff6cdf0be59688bc52 100644
|
| --- a/chrome/browser/apps/web_view_browsertest.cc
|
| +++ b/chrome/browser/apps/web_view_browsertest.cc
|
| @@ -6,6 +6,7 @@
|
| #include "base/path_service.h"
|
| #include "base/strings/stringprintf.h"
|
| #include "base/strings/utf_string_conversions.h"
|
| +#include "chrome/app/chrome_command_ids.h"
|
| #include "chrome/browser/apps/app_browsertest_util.h"
|
| #include "chrome/browser/automation/automation_util.h"
|
| #include "chrome/browser/chrome_content_browser_client.h"
|
| @@ -13,6 +14,8 @@
|
| #include "chrome/browser/prerender/prerender_link_manager.h"
|
| #include "chrome/browser/prerender/prerender_link_manager_factory.h"
|
| #include "chrome/browser/profiles/profile.h"
|
| +#include "chrome/browser/renderer_context_menu/render_view_context_menu.h"
|
| +#include "chrome/browser/renderer_context_menu/render_view_context_menu_test_util.h"
|
| #include "chrome/browser/ui/browser.h"
|
| #include "chrome/browser/ui/tabs/tab_strip_model.h"
|
| #include "chrome/test/base/ui_test_utils.h"
|
| @@ -42,8 +45,10 @@
|
| #include "base/win/windows_version.h"
|
| #endif
|
|
|
| +using extensions::MenuItem;
|
| using prerender::PrerenderLinkManager;
|
| using prerender::PrerenderLinkManagerFactory;
|
| +using ui::MenuModel;
|
|
|
| namespace {
|
| const char kEmptyResponsePath[] = "/close-socket";
|
| @@ -486,6 +491,25 @@ class WebViewTest : public extensions::PlatformAppBrowserTest {
|
| return scoped_ptr<net::test_server::HttpResponse>();
|
| }
|
|
|
| + // Shortcut to return the current MenuManager.
|
| + extensions::MenuManager* menu_manager() {
|
| + return extensions::MenuManager::Get(browser()->profile());
|
| + }
|
| +
|
| + // This gets all the items that any extension has registered for possible
|
| + // inclusion in context menus.
|
| + MenuItem::List GetItems() {
|
| + MenuItem::List result;
|
| + std::set<MenuItem::ExtensionKey> extension_ids =
|
| + menu_manager()->ExtensionIds();
|
| + std::set<MenuItem::ExtensionKey>::iterator i;
|
| + for (i = extension_ids.begin(); i != extension_ids.end(); ++i) {
|
| + const MenuItem::List* list = menu_manager()->MenuItems(*i);
|
| + result.insert(result.end(), list->begin(), list->end());
|
| + }
|
| + return result;
|
| + }
|
| +
|
| enum TestServer {
|
| NEEDS_TEST_SERVER,
|
| NO_TEST_SERVER
|
| @@ -1510,6 +1534,69 @@ void WebViewTest::MediaAccessAPIAllowTestHelper(const std::string& test_name) {
|
| mock->WaitForSetMediaPermission();
|
| }
|
|
|
| +IN_PROC_BROWSER_TEST_F(WebViewTest, ContextMenusAPI_Basic) {
|
| + GuestContentBrowserClient new_client;
|
| + content::ContentBrowserClient* old_client =
|
| + SetBrowserClientForTesting(&new_client);
|
| +
|
| + ExtensionTestMessageListener launched_listener("Launched", false);
|
| + launched_listener.AlsoListenForFailureMessage("TEST_FAILED");
|
| + LoadAndLaunchPlatformApp("web_view/context_menus/basic");
|
| + ASSERT_TRUE(launched_listener.WaitUntilSatisfied());
|
| +
|
| + content::WebContents* guest_web_contents = new_client.WaitForGuestCreated();
|
| + ASSERT_TRUE(guest_web_contents);
|
| + SetBrowserClientForTesting(old_client);
|
| +
|
| + content::WebContents* embedder = GetFirstAppWindowWebContents();
|
| + ASSERT_TRUE(embedder);
|
| +
|
| + // 1. Basic property test.
|
| + ExecuteScriptWaitForTitle(embedder, "checkProperties()", "ITEM_CHECKED");
|
| +
|
| + // 2. Create a menu item and wait for created callback to be called.
|
| + ExecuteScriptWaitForTitle(embedder, "createMenuItem()", "ITEM_CREATED");
|
| +
|
| + // 3. Click the created item, wait for the click handlers to fire from JS.
|
| + ExtensionTestMessageListener click_listener("ITEM_CLICKED", false);
|
| + GURL page_url("http://www.google.com");
|
| + // Create and build our test context menu.
|
| + scoped_ptr<TestRenderViewContextMenu> menu(TestRenderViewContextMenu::Create(
|
| + guest_web_contents, page_url, GURL(), GURL()));
|
| +
|
| + // Look for the extension item in the menu, and execute it.
|
| + int command_id = IDC_EXTENSIONS_CONTEXT_CUSTOM_FIRST;
|
| + ASSERT_TRUE(menu->IsCommandIdEnabled(command_id));
|
| + menu->ExecuteCommand(command_id, 0);
|
| +
|
| + // Wait for embedder's script to tell us its onclick fired, it does
|
| + // chrome.test.sendMessage('ITEM_CLICKED')
|
| + ASSERT_TRUE(click_listener.WaitUntilSatisfied());
|
| +
|
| + // 4. Update the item's title and verify.
|
| + ExecuteScriptWaitForTitle(embedder, "updateMenuItem()", "ITEM_UPDATED");
|
| + MenuItem::List items = GetItems();
|
| + ASSERT_EQ(1u, items.size());
|
| + MenuItem* item = items.at(0);
|
| + EXPECT_EQ("new_title", item->title());
|
| +
|
| + // 5. Remove the item.
|
| + ExecuteScriptWaitForTitle(embedder, "removeItem()", "ITEM_REMOVED");
|
| + MenuItem::List items_after_removal = GetItems();
|
| + ASSERT_EQ(0u, items_after_removal.size());
|
| +
|
| + // 6. Add some more items.
|
| + ExecuteScriptWaitForTitle(
|
| + embedder, "createThreeMenuItems()", "ITEM_MULTIPLE_CREATED");
|
| + MenuItem::List items_after_insertion = GetItems();
|
| + ASSERT_EQ(3u, items_after_insertion.size());
|
| +
|
| + // 7. Test removeAll().
|
| + ExecuteScriptWaitForTitle(embedder, "removeAllItems()", "ITEM_ALL_REMOVED");
|
| + MenuItem::List items_after_all_removal = GetItems();
|
| + ASSERT_EQ(0u, items_after_all_removal.size());
|
| +}
|
| +
|
| IN_PROC_BROWSER_TEST_F(WebViewTest, MediaAccessAPIAllow_TestAllow) {
|
| MediaAccessAPIAllowTestHelper("testAllow");
|
| }
|
|
|