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

Side by Side 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 unified diff | Download patch | Annotate | Revision Log
Property Changes:
Added: svn:eol-style
+ LF
OLDNEW
(Empty)
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/tab_contents/context_menu_utils.h"
6
7 #include "webkit/glue/context_menu.h"
8 #include "webkit/glue/webmenuitem.h"
9
10 using WebKit::WebContextMenuData;
11
12 namespace {
13
asargent_no_longer_on_chrome 2011/04/08 18:52:33 When you merge from trunk, make sure you pick up M
14 bool ExtensionContextMatch(const ContextMenuParams& params,
15 ExtensionMenuItem::ContextList contexts) {
16 bool has_link = !params.link_url.is_empty();
17 bool has_selection = !params.selection_text.empty();
18
19 if (contexts.Contains(ExtensionMenuItem::ALL) ||
20 (has_selection && contexts.Contains(ExtensionMenuItem::SELECTION)) ||
21 (has_link && contexts.Contains(ExtensionMenuItem::LINK)) ||
22 (params.src_url.scheme() == "filesystem" &&
23 contexts.Contains(ExtensionMenuItem::FILE)) ||
24 (params.is_editable && contexts.Contains(ExtensionMenuItem::EDITABLE))) {
25 return true;
26 }
27
28 switch (params.media_type) {
29 case WebKit::WebContextMenuData::MediaTypeImage:
30 return contexts.Contains(ExtensionMenuItem::IMAGE);
31
32 case WebKit::WebContextMenuData::MediaTypeVideo:
33 return contexts.Contains(ExtensionMenuItem::VIDEO);
34
35 case WebKit::WebContextMenuData::MediaTypeAudio:
36 return contexts.Contains(ExtensionMenuItem::AUDIO);
37
38 default:
39 break;
40 }
41
42
43 // PAGE is the least specific context, so we only examine that if none of the
44 // other contexts apply.
45 if (!has_link && !has_selection && !params.is_editable &&
46 params.media_type == WebKit::WebContextMenuData::MediaTypeNone &&
47 contexts.Contains(ExtensionMenuItem::PAGE))
48 return true;
49
50 return false;
51 }
52
53 bool ExtensionPatternMatch(const ExtensionExtent& patterns,
54 const GURL& url) {
55 // No patterns means no restriction, so that implicitly matches.
56 if (patterns.is_empty())
57 return true;
58 return patterns.ContainsURL(url);
59 }
60
61 }
62
63 const GURL& ContextMenuUtils::GetDocumentURL(const ContextMenuParams& params) {
64 return params.frame_url.is_empty() ? params.page_url : params.frame_url;
65 }
66
67 // Given a list of items, returns the ones that match given the contents
68 // of |params| and the profile.
69 ExtensionMenuItem::List ContextMenuUtils::GetRelevantExtensionItems(
70 const ExtensionMenuItem::List& items,
71 const ContextMenuParams& params,
72 Profile* profile,
73 bool can_cross_incognito) {
74 ExtensionMenuItem::List result;
75 for (ExtensionMenuItem::List::const_iterator i = items.begin();
76 i != items.end(); ++i) {
77 const ExtensionMenuItem* item = *i;
78
79 if (!ExtensionContextMatch(params, item->contexts()))
80 continue;
81
82 const GURL& document_url = GetDocumentURL(params);
83 if (!ExtensionPatternMatch(item->document_url_patterns(), document_url))
84 continue;
85
86 const GURL& target_url =
87 params.src_url.is_empty() ? params.link_url : params.src_url;
88 if (!ExtensionPatternMatch(item->target_url_patterns(), target_url))
89 continue;
90
91 if (item->id().profile == profile || can_cross_incognito)
92 result.push_back(*i);
93 }
94 return result;
95 }
96
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698