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

Unified Diff: chrome_frame/cfinstall/src/stub/prompt.js

Issue 8467005: Publish the source for CFInstall.min.js . (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Line length fixes. Created 9 years, 1 month 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_frame/cfinstall/src/stub/prompt.js
diff --git a/chrome_frame/cfinstall/src/stub/prompt.js b/chrome_frame/cfinstall/src/stub/prompt.js
new file mode 100644
index 0000000000000000000000000000000000000000..bf5ccee8a34098709c5409f2b725724ef808919c
--- /dev/null
+++ b/chrome_frame/cfinstall/src/stub/prompt.js
@@ -0,0 +1,210 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+/**
+ * @fileoverview Implements an in-site integration of the Chrome Frame
+ * installation flow by loading its implementation on demand.
+ **/
+
+goog.provide('google.cf.installer.Prompt');
+
+goog.require('google.cf.installer.InteractionDelegate');
+
+/**
+ * Constructs a prompt flow that loads its implementation from an external
+ * Javascript file.
+ * @constructor
+ * @param {Window=} opt_windowInstance The window in which to load the external
+ * script. Defaults to the global window object.
+ */
+google.cf.installer.Prompt = function(opt_windowInstance) {
+ this.window_ = opt_windowInstance || window;
+};
+
+/**
+ * An optional adapter to customize the display of the installation flow.
+ * @type {!google.cf.installer.InteractionDelegate|undefined}
+ * @private
+ */
+google.cf.installer.Prompt.prototype.customInteractionDelegate_ = undefined;
+
+/**
+ * An optional URL to a resource in the same domain as the calling site that
+ * will be used to transport installation results back to the client.
+ */
+google.cf.installer.Prompt.prototype.
+ manuallySpecifiedSameDomainResourceUri_ = undefined;
+
+/**
+ * Customizes the display of the prompt via the given adapter.
+ * @param {!google.cf.installer.InteractionDelegate} interactionDelegate The
+ * adapter.
+ */
+google.cf.installer.Prompt.prototype.setInteractionDelegate =
+ function(interactionDelegate) {
+ this.customInteractionDelegate_ = interactionDelegate;
+};
+
+/**
+ * Specifies a resource in the same domain as the calling site that will be used
+ * to carry installation results across domain boundaries.
+ * @param {string} uri The resource URI to use.
+ */
+google.cf.installer.Prompt.prototype.setSameDomainResourceUri = function(uri) {
+ this.manuallySpecifiedSameDomainResourceUri_ = uri;
+};
+
+/**
+ * Holds the loaded installation flow execution method. See
+ * CrossDomainInstall.execute (crossdomaininstall.js).
+ * @type {?function(function(), function()=, string=,
+ * google.cf.installer.InteractionDelegate=, string=)}
+ * @private
+ **/
+google.cf.installer.Prompt.prototype.installProc_ = null;
+
+/**
+ * @define {string} Defines the default implementation location.
+ **/
+google.cf.installer.Prompt.DEFAULT_IMPLEMENTATION_URL =
+ '//ajax.googleapis.com/ajax/libs/chrome-frame/2/CFInstall.impl.min.js';
+
+/**
+ * Defines the URL from which the full prompting logic will be retrieved.
+ * @type {string}
+ * @private
+ **/
+google.cf.installer.Prompt.prototype.implementationUrl_ =
+ google.cf.installer.Prompt.DEFAULT_IMPLEMENTATION_URL;
+
+/**
+ * Defines a custom URL for the Chrome Frame download page.
+ * @type {string|undefined}
+ * @private
+ */
+google.cf.installer.Prompt.prototype.downloadPageUrl_ = undefined;
+
+/**
+ * Overrides the default URL for loading the implementation.
+ * @param {string} url The custom URL.
+ */
+google.cf.installer.Prompt.prototype.setImplementationUrl = function(url) {
+ this.implementationUrl_ = url;
+};
+
+/**
+ * Overrides the default URL for the download page.
+ * @param {string} url The custom URL.
+ */
+google.cf.installer.Prompt.prototype.setDownloadPageUrl = function(url) {
+ this.downloadPageUrl_ = url;
+};
+
+/**
+ * Initiates loading of the full implementation if not already initiated.
+ * @param {function()=} opt_loadCompleteHandler A callback that will be notified
+ * when the loading of the script has completed, possibly unsuccessfully.
+ **/
+google.cf.installer.Prompt.prototype.loadInstallProc_ =
+ function(opt_loadCompleteHandler) {
+ var scriptParent = this.window_.document.getElementsByTagName('head')[0] ||
+ this.window_.document.documentElement;
+ var scriptEl = this.window_.document.createElement('script');
+ scriptEl.src = this.implementationUrl_;
+ scriptEl.type = 'text/javascript';
+
+ if (opt_loadCompleteHandler) {
+ var loadHandler = goog.bind(function() {
+ scriptEl.onreadystatechange = null;
+ scriptEl.onerror = null;
+ scriptEl.onload = null;
+ loadHandler = function(){};
+ opt_loadCompleteHandler();
+ }, this);
+
+ scriptEl.onload = loadHandler;
+ scriptEl.onerror = loadHandler;
+ scriptEl.onreadystatechange = function() {
+ if (scriptEl.readyState == 'loaded')
+ loadHandler();
+ };
+ }
+
+ scriptParent.appendChild(scriptEl);
+};
+
+/**
+ * Invokes the installation procedure with our configured parameters and
+ * the provided callbacks.
+ * @param {function()} successHandler The method to invoke upon installation
+ * success.
+ * @param {function()} opt_failureHandler The method to invoke upon installation
+ * failure.
+ */
+google.cf.installer.Prompt.prototype.invokeProc_ =
+ function(successHandler, opt_failureHandler) {
+ this.installProc_(successHandler,
+ opt_failureHandler,
+ this.downloadPageUrl_,
+ this.customInteractionDelegate_,
+ this.manuallySpecifiedSameDomainResourceUri_);
+}
+
+/**
+ * Receives a handle to the flow implementation method and invokes it.
+ * @param {function(function(), function()=, string=,
+ * google.cf.installer.InteractionDelegate=, string=)}
+ * installProc The install execution method. See
+ * CrossDomainInstall.execute().
+ * @param {function()} successHandler The method to invoke upon installation
+ * success.
+ * @param {function()} opt_failureHandler The method to invoke upon installation
+ * failure.
+ */
+google.cf.installer.Prompt.prototype.onProcLoaded_ =
+ function(installProc, successHandler, opt_failureHandler) {
+ this.window_['CF_google_cf_xd_install_stub'] = undefined;
+ this.installProc_ = installProc;
+ this.invokeProc_(successHandler, opt_failureHandler);
+};
+
+/**
+ * Loads and executes the in-line Google Chrome Frame installation flow.
+ * Will typically execute asynchronously (as the flow behaviour is not yet
+ * loaded).
+ *
+ * @param {function()} successHandler A function to invoke once Google
+ * Chrome Frame is successfully installed. Overrides the default
+ * behaviour, which is to reload the current page.
+ * @param {function()=} opt_failureHandler A function to invoke if the
+ * installation fails. The default behaviour is to do nothing.
+ */
+google.cf.installer.Prompt.prototype.open = function(successHandler,
+ opt_failureHandler) {
+ if (this.installProc_) {
+ this.invokeProc_(successHandler, opt_failureHandler);
+ return;
+ }
+
+ if (this.window_['CF_google_cf_xd_install_stub']) {
+ if (opt_failureHandler)
+ opt_failureHandler();
+ return;
+ }
+
+ this.window_['CF_google_cf_xd_install_stub'] = goog.bind(
+ function(installProc) {
+ this.onProcLoaded_(installProc, successHandler, opt_failureHandler);
+ }, this);
+
+ var loadCompleteHandler = undefined;
+ if (opt_failureHandler) {
+ loadCompleteHandler = goog.bind(function() {
+ if (!this.installProc_)
+ opt_failureHandler();
+ }, this);
+ }
+
+ this.loadInstallProc_(loadCompleteHandler);
+};

Powered by Google App Engine
This is Rietveld 408576698