| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "chrome/renderer/chrome_content_renderer_client.h" | 5 #include "chrome/renderer/chrome_content_renderer_client.h" |
| 6 | 6 |
| 7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
| 8 #include "base/debug/crash_logging.h" | 8 #include "base/debug/crash_logging.h" |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "base/metrics/field_trial.h" | 10 #include "base/metrics/field_trial.h" |
| (...skipping 1001 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1012 // Temporarily allow these whitelisted apps and WebUIs to use NaCl. | 1012 // Temporarily allow these whitelisted apps and WebUIs to use NaCl. |
| 1013 std::string app_url_host = app_url.host(); | 1013 std::string app_url_host = app_url.host(); |
| 1014 std::string manifest_url_path = manifest_url.path(); | 1014 std::string manifest_url_path = manifest_url.path(); |
| 1015 | 1015 |
| 1016 bool is_whitelisted_web_ui = | 1016 bool is_whitelisted_web_ui = |
| 1017 app_url.spec() == chrome::kChromeUIAppListStartPageURL; | 1017 app_url.spec() == chrome::kChromeUIAppListStartPageURL; |
| 1018 | 1018 |
| 1019 bool is_photo_app = | 1019 bool is_photo_app = |
| 1020 // Whitelisted apps must be served over https. | 1020 // Whitelisted apps must be served over https. |
| 1021 app_url.SchemeIsCryptographic() && manifest_url.SchemeIsCryptographic() && | 1021 app_url.SchemeIsCryptographic() && manifest_url.SchemeIsCryptographic() && |
| 1022 (EndsWith(app_url_host, "plus.google.com", false) || | 1022 (base::EndsWith(app_url_host, "plus.google.com", false) || |
| 1023 EndsWith(app_url_host, "plus.sandbox.google.com", false)) && | 1023 base::EndsWith(app_url_host, "plus.sandbox.google.com", false)) && |
| 1024 manifest_url.DomainIs("ssl.gstatic.com") && | 1024 manifest_url.DomainIs("ssl.gstatic.com") && |
| 1025 (manifest_url_path.find("s2/oz/nacl/") == 1 || | 1025 (manifest_url_path.find("s2/oz/nacl/") == 1 || |
| 1026 manifest_url_path.find("photos/nacl/") == 1); | 1026 manifest_url_path.find("photos/nacl/") == 1); |
| 1027 | 1027 |
| 1028 std::string manifest_fs_host; | 1028 std::string manifest_fs_host; |
| 1029 if (manifest_url.SchemeIsFileSystem() && manifest_url.inner_url()) { | 1029 if (manifest_url.SchemeIsFileSystem() && manifest_url.inner_url()) { |
| 1030 manifest_fs_host = manifest_url.inner_url()->host(); | 1030 manifest_fs_host = manifest_url.inner_url()->host(); |
| 1031 } | 1031 } |
| 1032 bool is_hangouts_app = | 1032 bool is_hangouts_app = |
| 1033 // Whitelisted apps must be served over secure scheme. | 1033 // Whitelisted apps must be served over secure scheme. |
| 1034 app_url.SchemeIsCryptographic() && manifest_url.SchemeIsFileSystem() && | 1034 app_url.SchemeIsCryptographic() && manifest_url.SchemeIsFileSystem() && |
| 1035 manifest_url.inner_url()->SchemeIsCryptographic() && | 1035 manifest_url.inner_url()->SchemeIsCryptographic() && |
| 1036 (EndsWith(app_url_host, "talkgadget.google.com", false) || | 1036 (base::EndsWith(app_url_host, "talkgadget.google.com", false) || |
| 1037 EndsWith(app_url_host, "plus.google.com", false) || | 1037 base::EndsWith(app_url_host, "plus.google.com", false) || |
| 1038 EndsWith(app_url_host, "plus.sandbox.google.com", false)) && | 1038 base::EndsWith(app_url_host, "plus.sandbox.google.com", false)) && |
| 1039 // The manifest must be loaded from the host's FileSystem. | 1039 // The manifest must be loaded from the host's FileSystem. |
| 1040 (manifest_fs_host == app_url_host); | 1040 (manifest_fs_host == app_url_host); |
| 1041 | 1041 |
| 1042 bool is_whitelisted_app = is_photo_app || is_hangouts_app; | 1042 bool is_whitelisted_app = is_photo_app || is_hangouts_app; |
| 1043 | 1043 |
| 1044 bool is_extension_from_webstore = false; | 1044 bool is_extension_from_webstore = false; |
| 1045 bool is_invoked_by_hosted_app = false; | 1045 bool is_invoked_by_hosted_app = false; |
| 1046 bool is_extension_unrestricted = false; | 1046 bool is_extension_unrestricted = false; |
| 1047 #if defined(ENABLE_EXTENSIONS) | 1047 #if defined(ENABLE_EXTENSIONS) |
| 1048 is_extension_from_webstore = extension && extension->from_webstore(); | 1048 is_extension_from_webstore = extension && extension->from_webstore(); |
| (...skipping 453 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1502 } | 1502 } |
| 1503 | 1503 |
| 1504 bool ChromeContentRendererClient::AllowPepperMediaStreamAPI( | 1504 bool ChromeContentRendererClient::AllowPepperMediaStreamAPI( |
| 1505 const GURL& url) { | 1505 const GURL& url) { |
| 1506 #if !defined(OS_ANDROID) | 1506 #if !defined(OS_ANDROID) |
| 1507 // Allow only the Hangouts app to use the MediaStream APIs. It's OK to check | 1507 // Allow only the Hangouts app to use the MediaStream APIs. It's OK to check |
| 1508 // the whitelist in the renderer, since we're only preventing access until | 1508 // the whitelist in the renderer, since we're only preventing access until |
| 1509 // these APIs are public and stable. | 1509 // these APIs are public and stable. |
| 1510 std::string url_host = url.host(); | 1510 std::string url_host = url.host(); |
| 1511 if (url.SchemeIs("https") && | 1511 if (url.SchemeIs("https") && |
| 1512 (EndsWith(url_host, "talkgadget.google.com", false) || | 1512 (base::EndsWith(url_host, "talkgadget.google.com", false) || |
| 1513 EndsWith(url_host, "plus.google.com", false) || | 1513 base::EndsWith(url_host, "plus.google.com", false) || |
| 1514 EndsWith(url_host, "plus.sandbox.google.com", false)) && | 1514 base::EndsWith(url_host, "plus.sandbox.google.com", false)) && |
| 1515 base::StartsWithASCII(url.path(), "/hangouts/", false)) { | 1515 base::StartsWithASCII(url.path(), "/hangouts/", false)) { |
| 1516 return true; | 1516 return true; |
| 1517 } | 1517 } |
| 1518 // Allow access for tests. | 1518 // Allow access for tests. |
| 1519 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 1519 if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
| 1520 switches::kEnablePepperTesting)) { | 1520 switches::kEnablePepperTesting)) { |
| 1521 return true; | 1521 return true; |
| 1522 } | 1522 } |
| 1523 #endif // !defined(OS_ANDROID) | 1523 #endif // !defined(OS_ANDROID) |
| 1524 return false; | 1524 return false; |
| (...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1648 WebString header_key(ASCIIToUTF16( | 1648 WebString header_key(ASCIIToUTF16( |
| 1649 data_reduction_proxy::chrome_proxy_header())); | 1649 data_reduction_proxy::chrome_proxy_header())); |
| 1650 if (!response.httpHeaderField(header_key).isNull() && | 1650 if (!response.httpHeaderField(header_key).isNull() && |
| 1651 response.httpHeaderField(header_key).utf8().find( | 1651 response.httpHeaderField(header_key).utf8().find( |
| 1652 data_reduction_proxy::chrome_proxy_lo_fi_directive()) != | 1652 data_reduction_proxy::chrome_proxy_lo_fi_directive()) != |
| 1653 std::string::npos) { | 1653 std::string::npos) { |
| 1654 (*properties)[data_reduction_proxy::chrome_proxy_header()] = | 1654 (*properties)[data_reduction_proxy::chrome_proxy_header()] = |
| 1655 data_reduction_proxy::chrome_proxy_lo_fi_directive(); | 1655 data_reduction_proxy::chrome_proxy_lo_fi_directive(); |
| 1656 } | 1656 } |
| 1657 } | 1657 } |
| OLD | NEW |