Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(59)

Unified Diff: chrome/browser/tab_contents/context_menu_utils.cc

Issue 6749021: Added new fileBrowserPrivate and fileHandler extension APIs (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/tab_contents/context_menu_utils.cc
===================================================================
--- chrome/browser/tab_contents/context_menu_utils.cc (revision 0)
+++ chrome/browser/tab_contents/context_menu_utils.cc (revision 0)
@@ -0,0 +1,96 @@
+// 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 "chrome/browser/tab_contents/context_menu_utils.h"
+
+#include "webkit/glue/context_menu.h"
+#include "webkit/glue/webmenuitem.h"
+
+using WebKit::WebContextMenuData;
+
+namespace {
+
asargent_no_longer_on_chrome 2011/04/08 18:52:33 When you merge from trunk, make sure you pick up M
+bool ExtensionContextMatch(const ContextMenuParams& params,
+ ExtensionMenuItem::ContextList contexts) {
+ bool has_link = !params.link_url.is_empty();
+ bool has_selection = !params.selection_text.empty();
+
+ if (contexts.Contains(ExtensionMenuItem::ALL) ||
+ (has_selection && contexts.Contains(ExtensionMenuItem::SELECTION)) ||
+ (has_link && contexts.Contains(ExtensionMenuItem::LINK)) ||
+ (params.src_url.scheme() == "filesystem" &&
+ contexts.Contains(ExtensionMenuItem::FILE)) ||
+ (params.is_editable && contexts.Contains(ExtensionMenuItem::EDITABLE))) {
+ return true;
+ }
+
+ switch (params.media_type) {
+ case WebKit::WebContextMenuData::MediaTypeImage:
+ return contexts.Contains(ExtensionMenuItem::IMAGE);
+
+ case WebKit::WebContextMenuData::MediaTypeVideo:
+ return contexts.Contains(ExtensionMenuItem::VIDEO);
+
+ case WebKit::WebContextMenuData::MediaTypeAudio:
+ return contexts.Contains(ExtensionMenuItem::AUDIO);
+
+ default:
+ break;
+ }
+
+
+ // PAGE is the least specific context, so we only examine that if none of the
+ // other contexts apply.
+ if (!has_link && !has_selection && !params.is_editable &&
+ params.media_type == WebKit::WebContextMenuData::MediaTypeNone &&
+ contexts.Contains(ExtensionMenuItem::PAGE))
+ return true;
+
+ return false;
+}
+
+bool ExtensionPatternMatch(const ExtensionExtent& patterns,
+ const GURL& url) {
+ // No patterns means no restriction, so that implicitly matches.
+ if (patterns.is_empty())
+ return true;
+ return patterns.ContainsURL(url);
+}
+
+}
+
+const GURL& ContextMenuUtils::GetDocumentURL(const ContextMenuParams& params) {
+ return params.frame_url.is_empty() ? params.page_url : params.frame_url;
+}
+
+// Given a list of items, returns the ones that match given the contents
+// of |params| and the profile.
+ExtensionMenuItem::List ContextMenuUtils::GetRelevantExtensionItems(
+ const ExtensionMenuItem::List& items,
+ const ContextMenuParams& params,
+ Profile* profile,
+ bool can_cross_incognito) {
+ ExtensionMenuItem::List result;
+ for (ExtensionMenuItem::List::const_iterator i = items.begin();
+ i != items.end(); ++i) {
+ const ExtensionMenuItem* item = *i;
+
+ if (!ExtensionContextMatch(params, item->contexts()))
+ continue;
+
+ const GURL& document_url = GetDocumentURL(params);
+ if (!ExtensionPatternMatch(item->document_url_patterns(), document_url))
+ continue;
+
+ const GURL& target_url =
+ params.src_url.is_empty() ? params.link_url : params.src_url;
+ if (!ExtensionPatternMatch(item->target_url_patterns(), target_url))
+ continue;
+
+ if (item->id().profile == profile || can_cross_incognito)
+ result.push_back(*i);
+ }
+ return result;
+}
+
Property changes on: chrome/browser/tab_contents/context_menu_utils.cc
___________________________________________________________________
Added: svn:eol-style
+ LF

Powered by Google App Engine
This is Rietveld 408576698