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/common/extensions/extension_set.h" | 5 #include "chrome/common/extensions/extension_set.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "chrome/common/extensions/extension.h" | 8 #include "chrome/common/extensions/extension.h" |
9 #include "chrome/common/url_constants.h" | 9 #include "chrome/common/url_constants.h" |
10 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebCString.h " | |
11 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebString.h" | |
10 | 12 |
11 using WebKit::WebSecurityOrigin; | 13 using WebKit::WebSecurityOrigin; |
14 using WebKit::WebString; | |
12 using extensions::Extension; | 15 using extensions::Extension; |
13 | 16 |
14 ExtensionURLInfo::ExtensionURLInfo(WebSecurityOrigin origin, const GURL& url) | 17 ExtensionURLInfo::ExtensionURLInfo(WebSecurityOrigin origin, const GURL& url) |
15 : origin_(origin), | 18 : origin_(origin), |
16 url_(url) { | 19 url_(url) { |
17 DCHECK(!origin_.isNull()); | 20 DCHECK(!origin_.isNull()); |
18 } | 21 } |
19 | 22 |
20 ExtensionURLInfo::ExtensionURLInfo(const GURL& url) | 23 ExtensionURLInfo::ExtensionURLInfo(const GURL& url) |
21 : url_(url) { | 24 : url_(url) { |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
69 | 72 |
70 const Extension* extension = GetExtensionOrAppByURL(info); | 73 const Extension* extension = GetExtensionOrAppByURL(info); |
71 if (!extension) | 74 if (!extension) |
72 return ""; | 75 return ""; |
73 | 76 |
74 return extension->id(); | 77 return extension->id(); |
75 } | 78 } |
76 | 79 |
77 const Extension* ExtensionSet::GetExtensionOrAppByURL( | 80 const Extension* ExtensionSet::GetExtensionOrAppByURL( |
78 const ExtensionURLInfo& info) const { | 81 const ExtensionURLInfo& info) const { |
79 // In the common case, the document's origin will correspond to its URL, | 82 if (!info.origin().isNull()) { |
80 // but in some rare cases involving sandboxing, the two will be different. | 83 // In the common case, the document's origin will correspond to its URL, |
81 // We catch those cases by checking whether the document's origin is unique. | 84 // but in some rare cases involving sandboxing, the two will be different. |
82 // If that's not the case, then we conclude that the document's security | 85 // We catch those cases by checking whether the document's origin is unique. |
83 // context is well-described by its URL and proceed to use only the URL. | 86 if (info.origin().isUnique()) |
84 if (!info.origin().isNull() && info.origin().isUnique()) | 87 return NULL; |
85 return NULL; | 88 |
89 // Additionally, the url will initialy be null during a window.open call | |
Mihai Parparita -not on Chrome
2012/06/21 01:30:11
Adam, you expressed a wish to always use the origi
| |
90 // with an extension URL, but the origin will be set correctly. If we have | |
91 // an extension host origin, then that should be enough to determine which | |
92 // extension we need. | |
93 if (info.origin().protocol() == | |
94 WebString::fromUTF8(chrome::kExtensionScheme)) | |
95 return GetByID(info.origin().host().utf8().data()); | |
96 } | |
86 | 97 |
87 if (info.url().SchemeIs(chrome::kExtensionScheme)) | 98 if (info.url().SchemeIs(chrome::kExtensionScheme)) |
88 return GetByID(info.url().host()); | 99 return GetByID(info.url().host()); |
89 | 100 |
90 return GetHostedAppByURL(info); | 101 return GetHostedAppByURL(info); |
91 } | 102 } |
92 | 103 |
93 const Extension* ExtensionSet::GetHostedAppByURL( | 104 const Extension* ExtensionSet::GetHostedAppByURL( |
94 const ExtensionURLInfo& info) const { | 105 const ExtensionURLInfo& info) const { |
95 for (ExtensionMap::const_iterator iter = extensions_.begin(); | 106 for (ExtensionMap::const_iterator iter = extensions_.begin(); |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
149 return true; | 160 return true; |
150 | 161 |
151 if (info.url().SchemeIs(chrome::kExtensionScheme)) { | 162 if (info.url().SchemeIs(chrome::kExtensionScheme)) { |
152 const Extension* extension = GetByID(info.url().host()); | 163 const Extension* extension = GetByID(info.url().host()); |
153 if (extension) { | 164 if (extension) { |
154 return extension->IsSandboxedPage(info.url().path()); | 165 return extension->IsSandboxedPage(info.url().path()); |
155 } | 166 } |
156 } | 167 } |
157 return false; | 168 return false; |
158 } | 169 } |
OLD | NEW |