| 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/extensions/webstore_bindings.h" | 5 #include "chrome/renderer/extensions/webstore_bindings.h" |
| 6 | 6 |
| 7 #include "base/strings/string_util.h" | 7 #include "base/strings/string_util.h" |
| 8 #include "chrome/common/extensions/extension.h" | 8 #include "chrome/common/extensions/extension.h" |
| 9 #include "chrome/common/extensions/extension_constants.h" | |
| 10 #include "chrome/common/extensions/extension_messages.h" | 9 #include "chrome/common/extensions/extension_messages.h" |
| 11 #include "chrome/renderer/extensions/chrome_v8_context.h" | 10 #include "chrome/renderer/extensions/chrome_v8_context.h" |
| 12 #include "content/public/renderer/render_view.h" | 11 #include "content/public/renderer/render_view.h" |
| 12 #include "extensions/common/extension_urls.h" |
| 13 #include "grit/renderer_resources.h" | 13 #include "grit/renderer_resources.h" |
| 14 #include "third_party/WebKit/public/web/WebDocument.h" | 14 #include "third_party/WebKit/public/web/WebDocument.h" |
| 15 #include "third_party/WebKit/public/web/WebElement.h" | 15 #include "third_party/WebKit/public/web/WebElement.h" |
| 16 #include "third_party/WebKit/public/web/WebNode.h" | 16 #include "third_party/WebKit/public/web/WebNode.h" |
| 17 #include "third_party/WebKit/public/web/WebNodeList.h" | 17 #include "third_party/WebKit/public/web/WebNodeList.h" |
| 18 #include "third_party/WebKit/public/web/WebUserGestureIndicator.h" | 18 #include "third_party/WebKit/public/web/WebUserGestureIndicator.h" |
| 19 #include "url/gurl.h" | 19 #include "url/gurl.h" |
| 20 #include "v8/include/v8.h" | 20 #include "v8/include/v8.h" |
| 21 | 21 |
| 22 using WebKit::WebDocument; | 22 using WebKit::WebDocument; |
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 131 *error = kNoWebstoreItemLinkFoundError; | 131 *error = kNoWebstoreItemLinkFoundError; |
| 132 return false; | 132 return false; |
| 133 } | 133 } |
| 134 | 134 |
| 135 WebElement head = document.head(); | 135 WebElement head = document.head(); |
| 136 if (head.isNull()) { | 136 if (head.isNull()) { |
| 137 *error = kNoWebstoreItemLinkFoundError; | 137 *error = kNoWebstoreItemLinkFoundError; |
| 138 return false; | 138 return false; |
| 139 } | 139 } |
| 140 | 140 |
| 141 GURL webstore_base_url = | 141 GURL webstore_base_url(GetWebstoreItemDetailURLPrefix()); |
| 142 GURL(extension_urls::GetWebstoreItemDetailURLPrefix()); | |
| 143 WebNodeList children = head.childNodes(); | 142 WebNodeList children = head.childNodes(); |
| 144 for (unsigned i = 0; i < children.length(); ++i) { | 143 for (unsigned i = 0; i < children.length(); ++i) { |
| 145 WebNode child = children.item(i); | 144 WebNode child = children.item(i); |
| 146 if (!child.isElementNode()) | 145 if (!child.isElementNode()) |
| 147 continue; | 146 continue; |
| 148 WebElement elem = child.to<WebElement>(); | 147 WebElement elem = child.to<WebElement>(); |
| 149 | 148 |
| 150 if (!elem.hasTagName("link") || !elem.hasAttribute("rel") || | 149 if (!elem.hasTagName("link") || !elem.hasAttribute("rel") || |
| 151 !elem.hasAttribute("href")) | 150 !elem.hasAttribute("href")) |
| 152 continue; | 151 continue; |
| (...skipping 18 matching lines...) Expand all Loading... |
| 171 if (webstore_url.scheme() != webstore_base_url.scheme() || | 170 if (webstore_url.scheme() != webstore_base_url.scheme() || |
| 172 webstore_url.host() != webstore_base_url.host() || | 171 webstore_url.host() != webstore_base_url.host() || |
| 173 !StartsWithASCII( | 172 !StartsWithASCII( |
| 174 webstore_url.path(), webstore_base_url.path(), true)) { | 173 webstore_url.path(), webstore_base_url.path(), true)) { |
| 175 *error = kInvalidWebstoreItemUrlError; | 174 *error = kInvalidWebstoreItemUrlError; |
| 176 return false; | 175 return false; |
| 177 } | 176 } |
| 178 | 177 |
| 179 std::string candidate_webstore_item_id = webstore_url.path().substr( | 178 std::string candidate_webstore_item_id = webstore_url.path().substr( |
| 180 webstore_base_url.path().length()); | 179 webstore_base_url.path().length()); |
| 181 if (!extensions::Extension::IdIsValid(candidate_webstore_item_id)) { | 180 if (!Extension::IdIsValid(candidate_webstore_item_id)) { |
| 182 *error = kInvalidWebstoreItemUrlError; | 181 *error = kInvalidWebstoreItemUrlError; |
| 183 return false; | 182 return false; |
| 184 } | 183 } |
| 185 | 184 |
| 186 std::string reconstructed_webstore_item_url_string = | 185 std::string reconstructed_webstore_item_url_string = |
| 187 extension_urls::GetWebstoreItemDetailURLPrefix() + | 186 GetWebstoreItemDetailURLPrefix() + candidate_webstore_item_id; |
| 188 candidate_webstore_item_id; | |
| 189 if (reconstructed_webstore_item_url_string != webstore_url_string) { | 187 if (reconstructed_webstore_item_url_string != webstore_url_string) { |
| 190 *error = kInvalidWebstoreItemUrlError; | 188 *error = kInvalidWebstoreItemUrlError; |
| 191 return false; | 189 return false; |
| 192 } | 190 } |
| 193 | 191 |
| 194 *webstore_item_id = candidate_webstore_item_id; | 192 *webstore_item_id = candidate_webstore_item_id; |
| 195 return true; | 193 return true; |
| 196 } | 194 } |
| 197 | 195 |
| 198 *error = kNoWebstoreItemLinkFoundError; | 196 *error = kNoWebstoreItemLinkFoundError; |
| (...skipping 18 matching lines...) Expand all Loading... |
| 217 v8::Handle<v8::Value> argv[] = { | 215 v8::Handle<v8::Value> argv[] = { |
| 218 v8::Integer::New(install_id), | 216 v8::Integer::New(install_id), |
| 219 v8::Boolean::New(success), | 217 v8::Boolean::New(success), |
| 220 v8::String::New(error.c_str()) | 218 v8::String::New(error.c_str()) |
| 221 }; | 219 }; |
| 222 context()->module_system()->CallModuleMethod( | 220 context()->module_system()->CallModuleMethod( |
| 223 "webstore", "onInstallResponse", arraysize(argv), argv); | 221 "webstore", "onInstallResponse", arraysize(argv), argv); |
| 224 } | 222 } |
| 225 | 223 |
| 226 } // namespace extensions | 224 } // namespace extensions |
| OLD | NEW |