OLD | NEW |
---|---|
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <algorithm> | 5 #include <algorithm> |
6 #include <set> | 6 #include <set> |
7 | 7 |
8 #include "chrome/browser/tab_contents/render_view_context_menu.h" | 8 #include "chrome/browser/tab_contents/render_view_context_menu.h" |
9 | 9 |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
45 #include "chrome/common/chrome_constants.h" | 45 #include "chrome/common/chrome_constants.h" |
46 #include "chrome/common/chrome_switches.h" | 46 #include "chrome/common/chrome_switches.h" |
47 #include "chrome/common/content_restriction.h" | 47 #include "chrome/common/content_restriction.h" |
48 #include "chrome/common/pref_names.h" | 48 #include "chrome/common/pref_names.h" |
49 #include "chrome/common/url_constants.h" | 49 #include "chrome/common/url_constants.h" |
50 #include "grit/generated_resources.h" | 50 #include "grit/generated_resources.h" |
51 #include "net/base/escape.h" | 51 #include "net/base/escape.h" |
52 #include "net/url_request/url_request.h" | 52 #include "net/url_request/url_request.h" |
53 #include "third_party/WebKit/Source/WebKit/chromium/public/WebContextMenuData.h" | 53 #include "third_party/WebKit/Source/WebKit/chromium/public/WebContextMenuData.h" |
54 #include "third_party/WebKit/Source/WebKit/chromium/public/WebMediaPlayerAction. h" | 54 #include "third_party/WebKit/Source/WebKit/chromium/public/WebMediaPlayerAction. h" |
55 #include "third_party/WebKit/Source/WebKit/chromium/public/WebTextDirection.h" | 55 #include "third_party/WebKit/Source/WebKit/chromium/public/WebSecurityPolicy.h" |
56 #include "ui/base/l10n/l10n_util.h" | 56 #include "ui/base/l10n/l10n_util.h" |
57 #include "ui/gfx/favicon_size.h" | 57 #include "ui/gfx/favicon_size.h" |
58 #include "webkit/glue/webmenuitem.h" | 58 #include "webkit/glue/webmenuitem.h" |
59 | 59 |
60 using WebKit::WebContextMenuData; | 60 using WebKit::WebContextMenuData; |
61 using WebKit::WebMediaPlayerAction; | 61 using WebKit::WebMediaPlayerAction; |
62 using WebKit::WebSecurityPolicy; | |
63 using WebKit::WebURL; | |
64 using WebKit::WebString; | |
62 | 65 |
63 namespace { | 66 namespace { |
64 | 67 |
65 bool IsCustomItemEnabled(const std::vector<WebMenuItem>& items, int id) { | 68 bool IsCustomItemEnabled(const std::vector<WebMenuItem>& items, int id) { |
66 DCHECK(id >= IDC_CONTENT_CONTEXT_CUSTOM_FIRST && | 69 DCHECK(id >= IDC_CONTENT_CONTEXT_CUSTOM_FIRST && |
67 id <= IDC_CONTENT_CONTEXT_CUSTOM_LAST); | 70 id <= IDC_CONTENT_CONTEXT_CUSTOM_LAST); |
68 for (size_t i = 0; i < items.size(); ++i) { | 71 for (size_t i = 0; i < items.size(); ++i) { |
69 int action_id = IDC_CONTENT_CONTEXT_CUSTOM_FIRST + items[i].action; | 72 int action_id = IDC_CONTENT_CONTEXT_CUSTOM_FIRST + items[i].action; |
70 if (action_id == id) | 73 if (action_id == id) |
71 return items[i].enabled; | 74 return items[i].enabled; |
(...skipping 1095 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1167 if (i != extension_item_map_.end()) { | 1170 if (i != extension_item_map_.end()) { |
1168 manager->ExecuteCommand(profile_, source_tab_contents_, params_, | 1171 manager->ExecuteCommand(profile_, source_tab_contents_, params_, |
1169 i->second); | 1172 i->second); |
1170 } | 1173 } |
1171 return; | 1174 return; |
1172 } | 1175 } |
1173 | 1176 |
1174 | 1177 |
1175 switch (id) { | 1178 switch (id) { |
1176 case IDC_CONTENT_CONTEXT_OPENLINKNEWTAB: | 1179 case IDC_CONTENT_CONTEXT_OPENLINKNEWTAB: |
1177 OpenURL(params_.link_url, | 1180 OpenURL(params_.link_url, params_.page_url, |
1178 source_tab_contents_->delegate() && | 1181 source_tab_contents_->delegate() && |
1179 source_tab_contents_->delegate()->IsApplication() ? | 1182 source_tab_contents_->delegate()->IsApplication() ? |
1180 NEW_FOREGROUND_TAB : NEW_BACKGROUND_TAB, | 1183 NEW_FOREGROUND_TAB : NEW_BACKGROUND_TAB, |
1181 PageTransition::LINK); | 1184 PageTransition::LINK); |
1182 break; | 1185 break; |
1183 | 1186 |
1184 case IDC_CONTENT_CONTEXT_OPENLINKNEWWINDOW: | 1187 case IDC_CONTENT_CONTEXT_OPENLINKNEWWINDOW: |
1185 OpenURL(params_.link_url, NEW_WINDOW, PageTransition::LINK); | 1188 OpenURL(params_.link_url, params_.page_url, |
1189 NEW_WINDOW, PageTransition::LINK); | |
1186 break; | 1190 break; |
1187 | 1191 |
1188 case IDC_CONTENT_CONTEXT_OPENLINKOFFTHERECORD: | 1192 case IDC_CONTENT_CONTEXT_OPENLINKOFFTHERECORD: |
1189 OpenURL(params_.link_url, OFF_THE_RECORD, PageTransition::LINK); | 1193 OpenURL(params_.link_url, GURL(), |
1194 OFF_THE_RECORD, PageTransition::LINK); | |
1190 break; | 1195 break; |
1191 | 1196 |
1192 case IDC_CONTENT_CONTEXT_SAVEAVAS: | 1197 case IDC_CONTENT_CONTEXT_SAVEAVAS: |
1193 case IDC_CONTENT_CONTEXT_SAVEIMAGEAS: | 1198 case IDC_CONTENT_CONTEXT_SAVEIMAGEAS: |
1194 case IDC_CONTENT_CONTEXT_SAVELINKAS: { | 1199 case IDC_CONTENT_CONTEXT_SAVELINKAS: { |
1195 const GURL& referrer = | 1200 const GURL& referrer = |
1196 params_.frame_url.is_empty() ? params_.page_url : params_.frame_url; | 1201 params_.frame_url.is_empty() ? params_.page_url : params_.frame_url; |
1197 const GURL& url = | 1202 const GURL& url = |
1198 (id == IDC_CONTENT_CONTEXT_SAVELINKAS ? params_.link_url : | 1203 (id == IDC_CONTENT_CONTEXT_SAVELINKAS ? params_.link_url : |
1199 params_.src_url); | 1204 params_.src_url); |
(...skipping 11 matching lines...) Expand all Loading... | |
1211 case IDC_CONTENT_CONTEXT_COPYAVLOCATION: | 1216 case IDC_CONTENT_CONTEXT_COPYAVLOCATION: |
1212 WriteURLToClipboard(params_.src_url); | 1217 WriteURLToClipboard(params_.src_url); |
1213 break; | 1218 break; |
1214 | 1219 |
1215 case IDC_CONTENT_CONTEXT_COPYIMAGE: | 1220 case IDC_CONTENT_CONTEXT_COPYIMAGE: |
1216 CopyImageAt(params_.x, params_.y); | 1221 CopyImageAt(params_.x, params_.y); |
1217 break; | 1222 break; |
1218 | 1223 |
1219 case IDC_CONTENT_CONTEXT_OPENIMAGENEWTAB: | 1224 case IDC_CONTENT_CONTEXT_OPENIMAGENEWTAB: |
1220 case IDC_CONTENT_CONTEXT_OPENAVNEWTAB: | 1225 case IDC_CONTENT_CONTEXT_OPENAVNEWTAB: |
1221 OpenURL(params_.src_url, NEW_BACKGROUND_TAB, PageTransition::LINK); | 1226 OpenURL(params_.src_url, params_.page_url, |
1227 NEW_BACKGROUND_TAB, PageTransition::LINK); | |
1222 break; | 1228 break; |
1223 | 1229 |
1224 case IDC_CONTENT_CONTEXT_PLAYPAUSE: { | 1230 case IDC_CONTENT_CONTEXT_PLAYPAUSE: { |
1225 bool play = !!(params_.media_flags & WebContextMenuData::MediaPaused); | 1231 bool play = !!(params_.media_flags & WebContextMenuData::MediaPaused); |
1226 if (play) { | 1232 if (play) { |
1227 UserMetrics::RecordAction(UserMetricsAction("MediaContextMenu_Play"), | 1233 UserMetrics::RecordAction(UserMetricsAction("MediaContextMenu_Play"), |
1228 profile_); | 1234 profile_); |
1229 } else { | 1235 } else { |
1230 UserMetrics::RecordAction(UserMetricsAction("MediaContextMenu_Pause"), | 1236 UserMetrics::RecordAction(UserMetricsAction("MediaContextMenu_Pause"), |
1231 profile_); | 1237 profile_); |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1332 source_tab_contents_, original_lang, target_lang); | 1338 source_tab_contents_, original_lang, target_lang); |
1333 break; | 1339 break; |
1334 } | 1340 } |
1335 | 1341 |
1336 case IDC_CONTENT_CONTEXT_RELOADFRAME: | 1342 case IDC_CONTENT_CONTEXT_RELOADFRAME: |
1337 source_tab_contents_->render_view_host()->ReloadFrame(); | 1343 source_tab_contents_->render_view_host()->ReloadFrame(); |
1338 break; | 1344 break; |
1339 | 1345 |
1340 case IDC_CONTENT_CONTEXT_VIEWFRAMESOURCE: | 1346 case IDC_CONTENT_CONTEXT_VIEWFRAMESOURCE: |
1341 OpenURL(GURL(chrome::kViewSourceScheme + std::string(":") + | 1347 OpenURL(GURL(chrome::kViewSourceScheme + std::string(":") + |
1342 params_.frame_url.spec()), NEW_FOREGROUND_TAB, PageTransition::LINK); | 1348 params_.frame_url.spec()), GURL(), |
1349 NEW_FOREGROUND_TAB, PageTransition::LINK); | |
1343 break; | 1350 break; |
1344 | 1351 |
1345 case IDC_CONTENT_CONTEXT_VIEWFRAMEINFO: { | 1352 case IDC_CONTENT_CONTEXT_VIEWFRAMEINFO: { |
1346 // Deserialize the SSL info. | 1353 // Deserialize the SSL info. |
1347 NavigationEntry::SSLStatus ssl; | 1354 NavigationEntry::SSLStatus ssl; |
1348 if (!params_.security_info.empty()) { | 1355 if (!params_.security_info.empty()) { |
1349 int cert_id, cert_status, security_bits, connection_status; | 1356 int cert_id, cert_status, security_bits, connection_status; |
1350 SSLManager::DeserializeSecurityInfo(params_.security_info, | 1357 SSLManager::DeserializeSecurityInfo(params_.security_info, |
1351 &cert_id, | 1358 &cert_id, |
1352 &cert_status, | 1359 &cert_status, |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1385 case IDC_CONTENT_CONTEXT_DELETE: | 1392 case IDC_CONTENT_CONTEXT_DELETE: |
1386 source_tab_contents_->render_view_host()->Delete(); | 1393 source_tab_contents_->render_view_host()->Delete(); |
1387 break; | 1394 break; |
1388 | 1395 |
1389 case IDC_CONTENT_CONTEXT_SELECTALL: | 1396 case IDC_CONTENT_CONTEXT_SELECTALL: |
1390 source_tab_contents_->render_view_host()->SelectAll(); | 1397 source_tab_contents_->render_view_host()->SelectAll(); |
1391 break; | 1398 break; |
1392 | 1399 |
1393 case IDC_CONTENT_CONTEXT_SEARCHWEBFOR: | 1400 case IDC_CONTENT_CONTEXT_SEARCHWEBFOR: |
1394 case IDC_CONTENT_CONTEXT_GOTOURL: { | 1401 case IDC_CONTENT_CONTEXT_GOTOURL: { |
1395 OpenURL(selection_navigation_url_, NEW_FOREGROUND_TAB, | 1402 OpenURL(selection_navigation_url_, GURL(), NEW_FOREGROUND_TAB, |
1396 PageTransition::LINK); | 1403 PageTransition::LINK); |
1397 break; | 1404 break; |
1398 } | 1405 } |
1399 | 1406 |
1400 case IDC_SPELLCHECK_SUGGESTION_0: | 1407 case IDC_SPELLCHECK_SUGGESTION_0: |
1401 case IDC_SPELLCHECK_SUGGESTION_1: | 1408 case IDC_SPELLCHECK_SUGGESTION_1: |
1402 case IDC_SPELLCHECK_SUGGESTION_2: | 1409 case IDC_SPELLCHECK_SUGGESTION_2: |
1403 case IDC_SPELLCHECK_SUGGESTION_3: | 1410 case IDC_SPELLCHECK_SUGGESTION_3: |
1404 case IDC_SPELLCHECK_SUGGESTION_4: | 1411 case IDC_SPELLCHECK_SUGGESTION_4: |
1405 source_tab_contents_->render_view_host()->Replace( | 1412 source_tab_contents_->render_view_host()->Replace( |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1502 } | 1509 } |
1503 | 1510 |
1504 string16 RenderViewContextMenu::PrintableSelectionText() { | 1511 string16 RenderViewContextMenu::PrintableSelectionText() { |
1505 return l10n_util::TruncateString(params_.selection_text, | 1512 return l10n_util::TruncateString(params_.selection_text, |
1506 kMaxSelectionTextLength); | 1513 kMaxSelectionTextLength); |
1507 } | 1514 } |
1508 | 1515 |
1509 // Controller functions -------------------------------------------------------- | 1516 // Controller functions -------------------------------------------------------- |
1510 | 1517 |
1511 void RenderViewContextMenu::OpenURL( | 1518 void RenderViewContextMenu::OpenURL( |
1512 const GURL& url, | 1519 const GURL& url, const GURL& referrer, |
1513 WindowOpenDisposition disposition, | 1520 WindowOpenDisposition disposition, |
1514 PageTransition::Type transition) { | 1521 PageTransition::Type transition) { |
1515 source_tab_contents_->OpenURL(url, GURL(), disposition, transition); | 1522 // Check security policy to prevent referrer being sent |
brettw
2011/03/14 19:51:37
Should be indented 2 spaces.
| |
1523 // in https to http transition. | |
1524 bool hideReferrer = WebSecurityPolicy::shouldHideReferrer( | |
brettw
2011/03/14 19:51:37
Should be "hide_referrer"
| |
1525 WebURL::WebURL(url), | |
1526 WebString::fromUTF8(WebURL::WebURL(referrer).spec())); | |
1527 source_tab_contents_->OpenURL(url, hideReferrer ? GURL() : referrer, | |
1528 disposition, transition); | |
1516 } | 1529 } |
1517 | 1530 |
1518 void RenderViewContextMenu::CopyImageAt(int x, int y) { | 1531 void RenderViewContextMenu::CopyImageAt(int x, int y) { |
1519 source_tab_contents_->render_view_host()->CopyImageAt(x, y); | 1532 source_tab_contents_->render_view_host()->CopyImageAt(x, y); |
1520 } | 1533 } |
1521 | 1534 |
1522 void RenderViewContextMenu::Inspect(int x, int y) { | 1535 void RenderViewContextMenu::Inspect(int x, int y) { |
1523 UserMetrics::RecordAction(UserMetricsAction("DevTools_InspectElement"), | 1536 UserMetrics::RecordAction(UserMetricsAction("DevTools_InspectElement"), |
1524 profile_); | 1537 profile_); |
1525 DevToolsManager::GetInstance()->InspectElement( | 1538 DevToolsManager::GetInstance()->InspectElement( |
1526 source_tab_contents_->render_view_host(), x, y); | 1539 source_tab_contents_->render_view_host(), x, y); |
1527 } | 1540 } |
1528 | 1541 |
1529 void RenderViewContextMenu::WriteURLToClipboard(const GURL& url) { | 1542 void RenderViewContextMenu::WriteURLToClipboard(const GURL& url) { |
1530 chrome_browser_net::WriteURLToClipboard( | 1543 chrome_browser_net::WriteURLToClipboard( |
1531 url, | 1544 url, |
1532 profile_->GetPrefs()->GetString(prefs::kAcceptLanguages), | 1545 profile_->GetPrefs()->GetString(prefs::kAcceptLanguages), |
1533 g_browser_process->clipboard()); | 1546 g_browser_process->clipboard()); |
1534 } | 1547 } |
1535 | 1548 |
1536 void RenderViewContextMenu::MediaPlayerActionAt( | 1549 void RenderViewContextMenu::MediaPlayerActionAt( |
1537 const gfx::Point& location, | 1550 const gfx::Point& location, |
1538 const WebMediaPlayerAction& action) { | 1551 const WebMediaPlayerAction& action) { |
1539 source_tab_contents_->render_view_host()->MediaPlayerActionAt( | 1552 source_tab_contents_->render_view_host()->MediaPlayerActionAt( |
1540 location, action); | 1553 location, action); |
1541 } | 1554 } |
OLD | NEW |