summaryrefslogtreecommitdiffstats
path: root/chrome/browser/tab_contents/render_view_context_menu_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/tab_contents/render_view_context_menu_unittest.cc')
-rw-r--r--chrome/browser/tab_contents/render_view_context_menu_unittest.cc240
1 files changed, 240 insertions, 0 deletions
diff --git a/chrome/browser/tab_contents/render_view_context_menu_unittest.cc b/chrome/browser/tab_contents/render_view_context_menu_unittest.cc
new file mode 100644
index 0000000..02ffe30
--- /dev/null
+++ b/chrome/browser/tab_contents/render_view_context_menu_unittest.cc
@@ -0,0 +1,240 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <string>
+
+#include "chrome/browser/tab_contents/render_view_context_menu.h"
+
+#include "chrome/browser/extensions/extension_prefs.h"
+#include "chrome/common/extensions/url_pattern.h"
+#include "googleurl/src/gurl.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "webkit/glue/context_menu.h"
+
+#include "third_party/WebKit/Source/WebKit/chromium/public/WebContextMenuData.h"
+
+class RenderViewContextMenuTest : public testing::Test {
+ public:
+ RenderViewContextMenuTest() { }
+
+ protected:
+ // Proxy defined here to minimize friend classes in RenderViewContextMenu
+ static bool ExtensionContextAndPatternMatch(
+ const ContextMenuParams& params,
+ ExtensionMenuItem::ContextList contexts,
+ const URLPatternSet& patterns) {
+ return RenderViewContextMenu::ExtensionContextAndPatternMatch(params,
+ contexts, patterns);
+ }
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(RenderViewContextMenuTest);
+};
+
+// Generates a ContextMenuParams that matches the specified contexts.
+static ContextMenuParams CreateParams(int contexts) {
+ ContextMenuParams rv;
+ rv.is_editable = false;
+ rv.media_type = WebKit::WebContextMenuData::MediaTypeNone;
+ rv.page_url = GURL("http://test.page/");
+
+ static const char16 selected_text[] = { 's', 'e', 'l', 0 };
+ if (contexts & ExtensionMenuItem::SELECTION)
+ rv.selection_text = selected_text;
+
+ if (contexts & ExtensionMenuItem::LINK)
+ rv.link_url = GURL("http://test.link/");
+
+ if (contexts & ExtensionMenuItem::EDITABLE)
+ rv.is_editable = true;
+
+ if (contexts & ExtensionMenuItem::IMAGE) {
+ rv.src_url = GURL("http://test.image/");
+ rv.media_type = WebKit::WebContextMenuData::MediaTypeImage;
+ }
+
+ if (contexts & ExtensionMenuItem::VIDEO) {
+ rv.src_url = GURL("http://test.video/");
+ rv.media_type = WebKit::WebContextMenuData::MediaTypeVideo;
+ }
+
+ if (contexts & ExtensionMenuItem::AUDIO) {
+ rv.src_url = GURL("http://test.audio/");
+ rv.media_type = WebKit::WebContextMenuData::MediaTypeAudio;
+ }
+
+ if (contexts & ExtensionMenuItem::FRAME)
+ rv.frame_url = GURL("http://test.frame/");
+
+ return rv;
+}
+
+// Generates a URLPatternSet with a single pattern
+static URLPatternSet CreatePatternSet(const std::string& pattern) {
+ URLPattern target(URLPattern::SCHEME_HTTP);
+ target.Parse(pattern, URLPattern::PARSE_LENIENT);
+
+ URLPatternSet rv;
+ rv.AddPattern(target);
+
+ return rv;
+}
+
+TEST_F(RenderViewContextMenuTest, TargetIgnoredForPage) {
+ ContextMenuParams params = CreateParams(0);
+
+ ExtensionMenuItem::ContextList contexts;
+ contexts.Add(ExtensionMenuItem::PAGE);
+
+ URLPatternSet patterns = CreatePatternSet("*://test.none/*");
+
+ EXPECT_TRUE(ExtensionContextAndPatternMatch(params, contexts, patterns));
+}
+
+TEST_F(RenderViewContextMenuTest, TargetCheckedForLink) {
+ ContextMenuParams params = CreateParams(ExtensionMenuItem::LINK);
+
+ ExtensionMenuItem::ContextList contexts;
+ contexts.Add(ExtensionMenuItem::PAGE);
+ contexts.Add(ExtensionMenuItem::LINK);
+
+ URLPatternSet patterns = CreatePatternSet("*://test.none/*");
+
+ EXPECT_FALSE(ExtensionContextAndPatternMatch(params, contexts, patterns));
+}
+
+TEST_F(RenderViewContextMenuTest, TargetCheckedForImage) {
+ ContextMenuParams params = CreateParams(ExtensionMenuItem::IMAGE);
+
+ ExtensionMenuItem::ContextList contexts;
+ contexts.Add(ExtensionMenuItem::PAGE);
+ contexts.Add(ExtensionMenuItem::IMAGE);
+
+ URLPatternSet patterns = CreatePatternSet("*://test.none/*");
+
+ EXPECT_FALSE(ExtensionContextAndPatternMatch(params, contexts, patterns));
+}
+
+TEST_F(RenderViewContextMenuTest, TargetCheckedForVideo) {
+ ContextMenuParams params = CreateParams(ExtensionMenuItem::VIDEO);
+
+ ExtensionMenuItem::ContextList contexts;
+ contexts.Add(ExtensionMenuItem::PAGE);
+ contexts.Add(ExtensionMenuItem::VIDEO);
+
+ URLPatternSet patterns = CreatePatternSet("*://test.none/*");
+
+ EXPECT_FALSE(ExtensionContextAndPatternMatch(params, contexts, patterns));
+}
+
+TEST_F(RenderViewContextMenuTest, TargetCheckedForAudio) {
+ ContextMenuParams params = CreateParams(ExtensionMenuItem::AUDIO);
+
+ ExtensionMenuItem::ContextList contexts;
+ contexts.Add(ExtensionMenuItem::PAGE);
+ contexts.Add(ExtensionMenuItem::AUDIO);
+
+ URLPatternSet patterns = CreatePatternSet("*://test.none/*");
+
+ EXPECT_FALSE(ExtensionContextAndPatternMatch(params, contexts, patterns));
+}
+
+TEST_F(RenderViewContextMenuTest, MatchWhenLinkedImageMatchesTarget) {
+ ContextMenuParams params = CreateParams(ExtensionMenuItem::IMAGE |
+ ExtensionMenuItem::LINK);
+
+ ExtensionMenuItem::ContextList contexts;
+ contexts.Add(ExtensionMenuItem::LINK);
+ contexts.Add(ExtensionMenuItem::IMAGE);
+
+ URLPatternSet patterns = CreatePatternSet("*://test.link/*");
+
+ EXPECT_TRUE(ExtensionContextAndPatternMatch(params, contexts, patterns));
+}
+
+TEST_F(RenderViewContextMenuTest, MatchWhenLinkedImageMatchesSource) {
+ ContextMenuParams params = CreateParams(ExtensionMenuItem::IMAGE |
+ ExtensionMenuItem::LINK);
+
+ ExtensionMenuItem::ContextList contexts;
+ contexts.Add(ExtensionMenuItem::LINK);
+ contexts.Add(ExtensionMenuItem::IMAGE);
+
+ URLPatternSet patterns = CreatePatternSet("*://test.image/*");
+
+ EXPECT_TRUE(ExtensionContextAndPatternMatch(params, contexts, patterns));
+}
+
+TEST_F(RenderViewContextMenuTest, NoMatchWhenLinkedImageMatchesNeither) {
+ ContextMenuParams params = CreateParams(ExtensionMenuItem::IMAGE |
+ ExtensionMenuItem::LINK);
+
+ ExtensionMenuItem::ContextList contexts;
+ contexts.Add(ExtensionMenuItem::LINK);
+ contexts.Add(ExtensionMenuItem::IMAGE);
+
+ URLPatternSet patterns = CreatePatternSet("*://test.none/*");
+
+ EXPECT_FALSE(ExtensionContextAndPatternMatch(params, contexts, patterns));
+}
+
+TEST_F(RenderViewContextMenuTest, TargetIgnoredForFrame) {
+ ContextMenuParams params = CreateParams(ExtensionMenuItem::FRAME);
+
+ ExtensionMenuItem::ContextList contexts;
+ contexts.Add(ExtensionMenuItem::FRAME);
+
+ URLPatternSet patterns = CreatePatternSet("*://test.none/*");
+
+ EXPECT_TRUE(ExtensionContextAndPatternMatch(params, contexts, patterns));
+}
+
+TEST_F(RenderViewContextMenuTest, TargetIgnoredForEditable) {
+ ContextMenuParams params = CreateParams(ExtensionMenuItem::EDITABLE);
+
+ ExtensionMenuItem::ContextList contexts;
+ contexts.Add(ExtensionMenuItem::EDITABLE);
+
+ URLPatternSet patterns = CreatePatternSet("*://test.none/*");
+
+ EXPECT_TRUE(ExtensionContextAndPatternMatch(params, contexts, patterns));
+}
+
+TEST_F(RenderViewContextMenuTest, TargetIgnoredForSelection) {
+ ContextMenuParams params = CreateParams(ExtensionMenuItem::SELECTION);
+
+ ExtensionMenuItem::ContextList contexts;
+ contexts.Add(ExtensionMenuItem::SELECTION);
+
+ URLPatternSet patterns = CreatePatternSet("*://test.none/*");
+
+ EXPECT_TRUE(ExtensionContextAndPatternMatch(params, contexts, patterns));
+}
+
+TEST_F(RenderViewContextMenuTest, TargetIgnoredForSelectionOnLink) {
+ ContextMenuParams params = CreateParams(ExtensionMenuItem::SELECTION |
+ ExtensionMenuItem::LINK);
+
+ ExtensionMenuItem::ContextList contexts;
+ contexts.Add(ExtensionMenuItem::SELECTION);
+ contexts.Add(ExtensionMenuItem::LINK);
+
+ URLPatternSet patterns = CreatePatternSet("*://test.none/*");
+
+ EXPECT_TRUE(ExtensionContextAndPatternMatch(params, contexts, patterns));
+}
+
+TEST_F(RenderViewContextMenuTest, TargetIgnoredForSelectionOnImage) {
+ ContextMenuParams params = CreateParams(ExtensionMenuItem::SELECTION |
+ ExtensionMenuItem::IMAGE);
+
+ ExtensionMenuItem::ContextList contexts;
+ contexts.Add(ExtensionMenuItem::SELECTION);
+ contexts.Add(ExtensionMenuItem::IMAGE);
+
+ URLPatternSet patterns = CreatePatternSet("*://test.none/*");
+
+ EXPECT_TRUE(ExtensionContextAndPatternMatch(params, contexts, patterns));
+}
+