Chromium Code Reviews| 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/browser/extensions/active_tab_permission_granter.h" | 5 #include "chrome/browser/extensions/active_tab_permission_granter.h" |
| 6 | 6 |
| 7 #include "chrome/browser/extensions/extension_action_runner.h" | 7 #include "chrome/browser/extensions/extension_action_runner.h" |
| 8 #include "chrome/browser/profiles/profile.h" | 8 #include "chrome/browser/profiles/profile.h" |
| 9 #include "content/public/browser/navigation_entry.h" | 9 #include "content/public/browser/navigation_entry.h" |
| 10 #include "content/public/browser/navigation_handle.h" | 10 #include "content/public/browser/navigation_handle.h" |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 59 process_host->Send(create_message.Run(true)); | 59 process_host->Send(create_message.Run(true)); |
| 60 sent_to_hosts.insert(frame_host->GetProcess()); | 60 sent_to_hosts.insert(frame_host->GetProcess()); |
| 61 } | 61 } |
| 62 } | 62 } |
| 63 // If the tab wasn't one of those processes already updated (it likely | 63 // If the tab wasn't one of those processes already updated (it likely |
| 64 // wasn't), update it. Tabs don't need to update the origin whitelist. | 64 // wasn't), update it. Tabs don't need to update the origin whitelist. |
| 65 if (sent_to_hosts.count(tab_process) == 0) | 65 if (sent_to_hosts.count(tab_process) == 0) |
| 66 tab_process->Send(create_message.Run(false)); | 66 tab_process->Send(create_message.Run(false)); |
| 67 } | 67 } |
| 68 | 68 |
| 69 ActiveTabPermissionGranter::Delegate* g_delegate = nullptr; | |
| 70 | |
| 69 } // namespace | 71 } // namespace |
| 70 | 72 |
| 71 ActiveTabPermissionGranter::ActiveTabPermissionGranter( | 73 ActiveTabPermissionGranter::ActiveTabPermissionGranter( |
| 72 content::WebContents* web_contents, | 74 content::WebContents* web_contents, |
| 73 int tab_id, | 75 int tab_id, |
| 74 Profile* profile) | 76 Profile* profile) |
| 75 : content::WebContentsObserver(web_contents), | 77 : content::WebContentsObserver(web_contents), |
| 76 tab_id_(tab_id), | 78 tab_id_(tab_id), |
| 77 extension_registry_observer_(this) { | 79 extension_registry_observer_(this) { |
| 78 extension_registry_observer_.Add(ExtensionRegistry::Get(profile)); | 80 extension_registry_observer_.Add(ExtensionRegistry::Get(profile)); |
| 79 } | 81 } |
| 80 | 82 |
| 81 ActiveTabPermissionGranter::~ActiveTabPermissionGranter() {} | 83 ActiveTabPermissionGranter::~ActiveTabPermissionGranter() {} |
| 82 | 84 |
| 85 // static | |
| 86 void ActiveTabPermissionGranter::SetPlatformDelegate(Delegate* delegate) { | |
| 87 // Disallow setting it twice (but allow resetting - don't forget to free in | |
| 88 // that case). | |
| 89 CHECK(!g_delegate || !delegate); | |
| 90 g_delegate = delegate; | |
| 91 } | |
| 92 | |
| 83 void ActiveTabPermissionGranter::GrantIfRequested(const Extension* extension) { | 93 void ActiveTabPermissionGranter::GrantIfRequested(const Extension* extension) { |
| 84 if (granted_extensions_.Contains(extension->id())) | 94 if (granted_extensions_.Contains(extension->id())) |
| 85 return; | 95 return; |
| 86 | 96 |
| 87 APIPermissionSet new_apis; | 97 APIPermissionSet new_apis; |
| 88 URLPatternSet new_hosts; | 98 URLPatternSet new_hosts; |
| 89 | 99 |
| 90 const PermissionsData* permissions_data = extension->permissions_data(); | 100 const PermissionsData* permissions_data = extension->permissions_data(); |
| 91 | 101 |
| 102 bool active_tab_granted = !g_delegate || | |
| 103 g_delegate->ActiveTabPermissionGranted(extension, web_contents()); | |
| 92 // If the extension requested all-hosts but has had it withheld, we grant it | 104 // If the extension requested all-hosts but has had it withheld, we grant it |
| 93 // active tab-style permissions, even if it doesn't have the activeTab | 105 // active tab-style permissions, even if it doesn't have the activeTab |
| 94 // permission in the manifest. | 106 // permission in the manifest. |
| 95 if (permissions_data->HasAPIPermission(APIPermission::kActiveTab) || | 107 if (permissions_data->HasWithheldImpliedAllHosts() || |
|
Andrew T Wilson (Slow)
2017/05/09 13:29:29
Why isn't HasWithheldImpliedAllHosts() subject to
Ivan Šandrk
2017/05/10 10:01:28
It's unrelated to activeTab functionality. Afaict
| |
| 96 permissions_data->HasWithheldImpliedAllHosts()) { | 108 (active_tab_granted && |
| 109 permissions_data->HasAPIPermission(APIPermission::kActiveTab))) { | |
| 97 new_hosts.AddOrigin(UserScript::ValidUserScriptSchemes(), | 110 new_hosts.AddOrigin(UserScript::ValidUserScriptSchemes(), |
| 98 web_contents()->GetVisibleURL().GetOrigin()); | 111 web_contents()->GetVisibleURL().GetOrigin()); |
| 99 new_apis.insert(APIPermission::kTab); | 112 new_apis.insert(APIPermission::kTab); |
| 100 } | 113 } |
| 101 | 114 |
| 102 if (permissions_data->HasAPIPermission(APIPermission::kTabCapture)) | 115 if (permissions_data->HasAPIPermission(APIPermission::kTabCapture)) |
| 103 new_apis.insert(APIPermission::kTabCaptureForTab); | 116 new_apis.insert(APIPermission::kTabCaptureForTab); |
| 104 | 117 |
| 105 if (!new_apis.empty() || !new_hosts.is_empty()) { | 118 if (!new_apis.empty() || !new_hosts.is_empty()) { |
| 106 granted_extensions_.Insert(extension); | 119 granted_extensions_.Insert(extension); |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 202 CreateMessageFunction clear_message = | 215 CreateMessageFunction clear_message = |
| 203 base::Bind(&CreateClearMessage, extension_ids, tab_id_); | 216 base::Bind(&CreateClearMessage, extension_ids, tab_id_); |
| 204 SendMessageToProcesses(frame_hosts, | 217 SendMessageToProcesses(frame_hosts, |
| 205 web_contents()->GetRenderProcessHost(), | 218 web_contents()->GetRenderProcessHost(), |
| 206 clear_message); | 219 clear_message); |
| 207 | 220 |
| 208 granted_extensions_.Clear(); | 221 granted_extensions_.Clear(); |
| 209 } | 222 } |
| 210 | 223 |
| 211 } // namespace extensions | 224 } // namespace extensions |
| OLD | NEW |