Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(6053)

Unified Diff: chrome/browser/extensions/extension_webstore_private_api.cc

Issue 3353015: Implement gallery install API (Closed) Base URL: http://src.chromium.org/git/chromium.git
Patch Set: erik comments Created 10 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/extension_webstore_private_api.cc
diff --git a/chrome/browser/extensions/extension_webstore_private_api.cc b/chrome/browser/extensions/extension_webstore_private_api.cc
index 536008c3cfeb68493830725a8d56256285387347..184c9e53590faf6334b492bedab0a608ddc21dd8 100644
--- a/chrome/browser/extensions/extension_webstore_private_api.cc
+++ b/chrome/browser/extensions/extension_webstore_private_api.cc
@@ -4,17 +4,72 @@
#include "chrome/browser/extensions/extension_webstore_private_api.h"
+#include "base/string_util.h"
#include "base/values.h"
+#include "chrome/browser/browser_process.h"
+#include "chrome/browser/extensions/crx_installer.h"
#include "chrome/browser/extensions/extension_prefs.h"
#include "chrome/browser/extensions/extensions_service.h"
#include "chrome/browser/sync/profile_sync_service.h"
+#include "chrome/browser/tab_contents/tab_contents.h"
+#include "chrome/common/extensions/extension_constants.h"
+#include "net/base/escape.h"
+
+namespace {
+
+const char* install_base_url = extension_urls::kGalleryUpdateHttpsUrl;
+
+}
static bool IsWebStoreURL(const GURL& url) {
GURL store_url(Extension::ChromeStoreURL());
if (!url.is_valid() || !store_url.is_valid()) {
return false;
}
- return store_url.GetOrigin() == url.GetOrigin();
+
+ // Ignore port. It may be set on |url| during tests, but cannot be set on
+ // ChromeStoreURL.
+ return store_url.scheme() == url.scheme() &&
+ store_url.host() == url.host();
+}
+
+// static
+void InstallFunction::SetTestingInstallBaseUrl(
+ const char* testing_install_base_url) {
+ install_base_url = testing_install_base_url;
+}
+
+bool InstallFunction::RunImpl() {
+ if (!IsWebStoreURL(source_url()))
+ return false;
+
+ std::string id;
+ EXTENSION_FUNCTION_VALIDATE(args_->GetString(0, &id));
+ EXTENSION_FUNCTION_VALIDATE(Extension::IdIsValid(id));
+
+ std::vector<std::string> params;
+ params.push_back("id=" + id);
+ params.push_back("lang=" + g_browser_process->GetApplicationLocale());
+ params.push_back("uc");
+ std::string url_string = install_base_url;
+
+ GURL url(url_string + "?response=redirect&x=" +
+ EscapeQueryParamValue(JoinString(params, '&'), true));
+ DCHECK(url.is_valid());
+
+ // Cleared in ~CrxInstaller().
+ CrxInstaller::SetWhitelistedInstallId(id);
+
+ // The download url for the given |id| is now contained in |url|. We
+ // navigate the current (calling) tab to this url which will result in a
+ // download starting. Once completed it will go through the normal extension
+ // install flow. The above call to SetWhitelistedInstallId will bypass the
+ // normal permissions install dialog.
+ NavigationController& controller =
+ dispatcher()->delegate()->associated_tab_contents()->controller();
+ controller.LoadURL(url, source_url(), PageTransition::LINK);
+
+ return true;
}
bool GetSyncLoginFunction::RunImpl() {
« no previous file with comments | « chrome/browser/extensions/extension_webstore_private_api.h ('k') | chrome/browser/extensions/extensions_service.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698