| Index: chrome/browser/ui/intents/web_intent_picker_controller.h
|
| diff --git a/chrome/browser/ui/intents/web_intent_picker_controller.h b/chrome/browser/ui/intents/web_intent_picker_controller.h
|
| deleted file mode 100644
|
| index 9653922fd5ab7d80c8b9f59140cd08c857d3851e..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/ui/intents/web_intent_picker_controller.h
|
| +++ /dev/null
|
| @@ -1,349 +0,0 @@
|
| -// Copyright (c) 2012 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.
|
| -
|
| -#ifndef CHROME_BROWSER_UI_INTENTS_WEB_INTENT_PICKER_CONTROLLER_H_
|
| -#define CHROME_BROWSER_UI_INTENTS_WEB_INTENT_PICKER_CONTROLLER_H_
|
| -
|
| -#include <vector>
|
| -
|
| -#include "base/compiler_specific.h"
|
| -#include "base/memory/ref_counted.h"
|
| -#include "base/memory/scoped_ptr.h"
|
| -#include "base/memory/weak_ptr.h"
|
| -#include "base/string16.h"
|
| -#include "chrome/browser/extensions/webstore_installer.h"
|
| -#include "chrome/browser/intents/cws_intents_registry.h"
|
| -#include "chrome/browser/intents/web_intents_registry.h"
|
| -#include "chrome/browser/intents/web_intents_reporting.h"
|
| -#include "chrome/browser/ui/intents/web_intent_picker_delegate.h"
|
| -#include "content/public/browser/download_id.h"
|
| -#include "content/public/browser/web_contents_user_data.h"
|
| -#include "webkit/glue/web_intent_data.h"
|
| -#include "webkit/glue/web_intent_reply_data.h"
|
| -#include "webkit/glue/web_intent_service_data.h"
|
| -
|
| -class Browser;
|
| -struct DefaultWebIntentService;
|
| -class GURL;
|
| -class Profile;
|
| -class WebIntentPicker;
|
| -class WebIntentPickerModel;
|
| -
|
| -namespace content {
|
| -class WebContents;
|
| -class WebIntentsDispatcher;
|
| -}
|
| -
|
| -namespace web_intents {
|
| -class NativeServiceFactory;
|
| -class IconLoader;
|
| -}
|
| -
|
| -namespace webkit_glue {
|
| -struct WebIntentServiceData;
|
| -}
|
| -
|
| -// Controls the creation of the WebIntentPicker UI and forwards the user's
|
| -// intent handler choice back to the WebContents object.
|
| -class WebIntentPickerController
|
| - : public WebIntentPickerDelegate,
|
| - public extensions::WebstoreInstaller::Delegate,
|
| - public content::WebContentsUserData<WebIntentPickerController> {
|
| - public:
|
| -
|
| - // The various states that the UI may be in. Public for testing.
|
| - enum WebIntentPickerState {
|
| - kPickerHidden, // Picker not displayed at all.
|
| - kPickerSetup, // Initial setup. Acquires data, keeps picker hidden.
|
| - kPickerWaiting, // Displaying "waiting for CWS".
|
| - kPickerWaitLong, // "waiting" has displayed for longer than min. time.
|
| - kPickerMain, // Displaying main picker dialog.
|
| - kPickerInline, // Displaying inline intent handler.
|
| - };
|
| -
|
| - // Events that happen during picker life time. Drive state machine.
|
| - enum WebIntentPickerEvent {
|
| - kPickerEventHiddenSetupTimeout, // Time for hidden setup exired.
|
| - kPickerEventMaxWaitTimeExceeded, // Exceeded max wait time for CWS results.
|
| - kPickerEventRegistryDataComplete, // Data from the registry has arrived.
|
| - kPickerEventAsyncDataComplete, // Data from registry and CWS has arrived.
|
| - };
|
| -
|
| - virtual ~WebIntentPickerController();
|
| -
|
| - // Sets the intent data and return pathway handler object for which
|
| - // this picker was created. The picker takes ownership of
|
| - // |intents_dispatcher|. |intents_dispatcher| must not be NULL.
|
| - void SetIntentsDispatcher(content::WebIntentsDispatcher* intents_dispatcher);
|
| -
|
| - // Shows the web intent picker given the intent |action| and MIME-type |type|.
|
| - void ShowDialog(const string16& action,
|
| - const string16& type);
|
| -
|
| - // Called directly after SetIntentsDispatcher to handle the dispatch of the
|
| - // intent to the indicated service. The picker model may still be unloaded.
|
| - void InvokeServiceWithSelection(
|
| - const webkit_glue::WebIntentServiceData& service);
|
| -
|
| - // Called by the location bar to see whether the web intents picker button
|
| - // should be shown.
|
| - bool ShowLocationBarPickerButton();
|
| -
|
| - // Record that the location bar button has been animated.
|
| - void SetLocationBarPickerButtonIndicated() {
|
| - location_bar_button_indicated_ = true;
|
| - }
|
| -
|
| - // Check whether the location bar button has been animated.
|
| - bool location_bar_picker_button_indicated() const {
|
| - return location_bar_button_indicated_;
|
| - }
|
| -
|
| - // Called by the location bar to notify picker that the button was clicked.
|
| - // Called in the controller of the tab which is displaying the service.
|
| - void LocationBarPickerButtonClicked();
|
| -
|
| - // Called to notify a controller for a page hosting a web intents service
|
| - // that the source WebContents has been destroyed.
|
| - void SourceWebContentsDestroyed(content::WebContents* source);
|
| -
|
| - protected:
|
| - // WebIntentPickerDelegate implementation.
|
| - virtual void OnServiceChosen(
|
| - const GURL& url,
|
| - webkit_glue::WebIntentServiceData::Disposition disposition,
|
| - DefaultsUsage suppress_defaults) OVERRIDE;
|
| - virtual content::WebContents* CreateWebContentsForInlineDisposition(
|
| - Profile* profile, const GURL& url) OVERRIDE;
|
| - virtual void OnExtensionInstallRequested(const std::string& id) OVERRIDE;
|
| - virtual void OnExtensionLinkClicked(
|
| - const std::string& id,
|
| - WindowOpenDisposition disposition) OVERRIDE;
|
| - virtual void OnSuggestionsLinkClicked(
|
| - WindowOpenDisposition disposition) OVERRIDE;
|
| - virtual void OnUserCancelledPickerDialog() OVERRIDE;
|
| - virtual void OnChooseAnotherService() OVERRIDE;
|
| - virtual void OnClosing() OVERRIDE;
|
| -
|
| - // extensions::WebstoreInstaller::Delegate implementation.
|
| - virtual void OnExtensionDownloadStarted(const std::string& id,
|
| - content::DownloadItem* item) OVERRIDE;
|
| - virtual void OnExtensionDownloadProgress(
|
| - const std::string& id,
|
| - content::DownloadItem* item) OVERRIDE;
|
| - virtual void OnExtensionInstallSuccess(const std::string& id) OVERRIDE;
|
| - virtual void OnExtensionInstallFailure(
|
| - const std::string& id,
|
| - const std::string& error,
|
| - extensions::WebstoreInstaller::FailureReason reason) OVERRIDE;
|
| -
|
| - private:
|
| - explicit WebIntentPickerController(content::WebContents* web_contents);
|
| - friend class content::WebContentsUserData<WebIntentPickerController>;
|
| -
|
| - friend class WebIntentPickerControllerTest;
|
| - friend class WebIntentPickerControllerBrowserTest;
|
| - friend class WebIntentPickerControllerIncognitoBrowserTest;
|
| - friend class WebIntentsButtonDecorationTest;
|
| -
|
| - // Forward declaraton of the internal implementation class.
|
| - class UMAReporter;
|
| -
|
| - // Dispatches intent to a just-installed extension with ID |extension_id|.
|
| - void DispatchToInstalledExtension(const std::string& extension_id);
|
| -
|
| - // Adds a service to the data model.
|
| - void AddServiceToModel(const webkit_glue::WebIntentServiceData& service);
|
| -
|
| - // Register the user-selected service (indicated by the passed |url|) as
|
| - // the default for the combination of action/type/options in the picker.
|
| - void SetDefaultServiceForSelection(const GURL& url);
|
| -
|
| - // Calculate a digest value for the services in the picker.
|
| - int64 DigestServices();
|
| -
|
| - // Gets a notification when the return message is sent to the source tab,
|
| - // so we can close the picker dialog or service tab.
|
| - void OnSendReturnMessage(webkit_glue::WebIntentReplyType reply_type);
|
| -
|
| - // Exposed for tests only.
|
| - void set_picker(WebIntentPicker* picker) { picker_ = picker; }
|
| -
|
| - // Exposed for tests only.
|
| - void set_model_observer(WebIntentPickerModelObserver* observer) {
|
| - picker_model_->set_observer(observer);
|
| - }
|
| -
|
| - // Notify the controller that its WebContents is hosting a web intents
|
| - // service. Sets the source and dispatcher for the invoking client.
|
| - void SetWindowDispositionSource(content::WebContents* source,
|
| - content::WebIntentsDispatcher* dispatcher);
|
| -
|
| - // Called to notify a controller for a page hosting a web intents service
|
| - // that the source dispatcher has been replied on.
|
| - void SourceDispatcherReplied(webkit_glue::WebIntentReplyType reply_type);
|
| -
|
| - // Called by the WebIntentsRegistry, returning |services|, which is
|
| - // a list of WebIntentServiceData matching the query.
|
| - void OnWebIntentServicesAvailable(
|
| - const std::vector<webkit_glue::WebIntentServiceData>& services);
|
| -
|
| - // Called when a default service is returned from the WebIntentsRegistry.
|
| - // (Still called with default_service.service_url empty if there are no
|
| - // defaults.)
|
| - void OnWebIntentDefaultsAvailable(
|
| - const DefaultWebIntentService& default_service);
|
| -
|
| - // Coordination method which is delegated to by the registry calls to get
|
| - // services and defaults. Checks whether the picker should be shown or if
|
| - // default choices allow it to be skipped.
|
| - void RegistryCallsCompleted();
|
| -
|
| - // Called when WebIntentServiceData is ready for checking extensions
|
| - // when dispatching explicit intents. Gets |services|
|
| - // from the WebIntentsRegistry to check for known urls/extensions and find
|
| - // disposition data.
|
| - void OnWebIntentServicesAvailableForExplicitIntent(
|
| - const std::vector<webkit_glue::WebIntentServiceData>& services);
|
| -
|
| - // Called when IntentExtensionInfo is returned from the CWSIntentsRegistry.
|
| - void OnCWSIntentServicesAvailable(
|
| - const CWSIntentsRegistry::IntentExtensionList& extensions);
|
| -
|
| - void OnIntentDataArrived();
|
| -
|
| - // Reset internal state to default values.
|
| - void Reset();
|
| -
|
| - // Called to show a custom extension install dialog.
|
| - void OnShowExtensionInstallDialog(
|
| - const ExtensionInstallPrompt::ShowParams& show_params,
|
| - ExtensionInstallPrompt::Delegate* delegate,
|
| - const ExtensionInstallPrompt::Prompt& prompt);
|
| -
|
| - // Signals that a picker event has occurred.
|
| - void OnPickerEvent(WebIntentPickerEvent event);
|
| -
|
| - // Decrements the |pending_async_count_| and notifies the picker if it
|
| - // reaches zero.
|
| - void AsyncOperationFinished();
|
| -
|
| - // Invoke the specified service at |service_url| with chosen |disposition|.
|
| - void InvokeService(const WebIntentPickerModel::InstalledService& service);
|
| -
|
| - // Sets current dialog state.
|
| - void SetDialogState(WebIntentPickerState state);
|
| -
|
| - // Helper to create picker dialog UI.
|
| - void CreatePicker();
|
| -
|
| - // Closes the currently active picker.
|
| - void ClosePicker();
|
| -
|
| - // Re-starts the process of showing the dialog, suppressing any default
|
| - // queries. Called on the user clicking Use-Another-Service.
|
| - void ReshowDialog();
|
| -
|
| - // Delegate for ShowDialog and ReshowDialog. Starts all the data queries for
|
| - // loading the picker model and showing the dialog.
|
| - void ShowDialog(DefaultsUsage suppress_defaults);
|
| -
|
| - // Cancel a pending download if any.
|
| - void CancelDownload();
|
| -
|
| - WebIntentPickerState dialog_state_; // Current state of the dialog.
|
| -
|
| - // A weak pointer to the web contents that the picker is displayed on.
|
| - content::WebContents* web_contents_;
|
| -
|
| - // A weak pointer to the profile for the web contents.
|
| - Profile* profile_;
|
| -
|
| - // A weak pointer to the picker this controller controls.
|
| - WebIntentPicker* picker_;
|
| -
|
| - // The model for the picker. Owned by this controller. It should not be NULL
|
| - // while this controller exists, even if the picker is not shown.
|
| - scoped_ptr<WebIntentPickerModel> picker_model_;
|
| -
|
| - // UMA reporting manager.
|
| - scoped_ptr<UMAReporter> uma_reporter_;
|
| -
|
| - // A count of the outstanding asynchronous calls.
|
| - int pending_async_count_;
|
| -
|
| - // A count of outstanding WebIntentsRegistry calls.
|
| - int pending_registry_calls_count_;
|
| -
|
| - // Indicator that there is a pending request for cws data.
|
| - bool pending_cws_request_;
|
| -
|
| - // Is true if the picker is currently visible.
|
| - // This bool is not equivalent to picker != NULL in a unit test. In that
|
| - // case, a picker may be non-NULL before it is shown.
|
| - bool picker_shown_;
|
| -
|
| -#if defined(TOOLKIT_VIEWS)
|
| - // Set to true if user cancelled the picker dialog. Set to false if the picker
|
| - // dialog is closing for any other reason.
|
| - // TODO(rouslan): We need to fix DialogDelegate in Views to notify us when the
|
| - // user closes the picker dialog. This boolean is a mediocre workaround for
|
| - // lack of that information.
|
| - bool cancelled_;
|
| -#endif
|
| -
|
| - // Weak pointer to the source WebContents for the intent if it is associated
|
| - // with this controller and hosting a web intents window disposition service.
|
| - content::WebContents* window_disposition_source_;
|
| -
|
| - // If this tab is hosting a web intents service, a weak pointer to dispatcher
|
| - // that invoked us. Weak pointer.
|
| - content::WebIntentsDispatcher* source_intents_dispatcher_;
|
| -
|
| - // Weak pointer to the routing object for the renderer which launched the
|
| - // intent. Contains the intent data and a way to signal back to the
|
| - // client page.
|
| - content::WebIntentsDispatcher* intents_dispatcher_;
|
| -
|
| - // Saves whether the use-another-service button has been
|
| - // animated on the location bar.
|
| - bool location_bar_button_indicated_;
|
| -
|
| - // Weak pointer to the tab servicing the intent. Remembered in order to
|
| - // close it when a reply is sent.
|
| - content::WebContents* service_tab_;
|
| -
|
| - // Object managing the details of icon loading.
|
| - scoped_ptr<web_intents::IconLoader> icon_loader_;
|
| -
|
| - // Factory for weak pointers used in callbacks for async calls to load the
|
| - // picker model.
|
| - base::WeakPtrFactory<WebIntentPickerController> weak_ptr_factory_;
|
| -
|
| - // Timer factory for minimum display time of "waiting" dialog.
|
| - base::WeakPtrFactory<WebIntentPickerController> timer_factory_;
|
| -
|
| - // Weak pointers for the dispatcher OnSendReturnMessage will not be
|
| - // cancelled on picker close.
|
| - base::WeakPtrFactory<WebIntentPickerController> dispatcher_factory_;
|
| -
|
| - // Bucket identifier for UMA reporting. Saved off in a field
|
| - // to avoid repeated calculation of the bucket across
|
| - // multiple UMA calls. Should be recalculated each time
|
| - // |intents_dispatcher_| is set.
|
| - web_intents::UMABucket uma_bucket_;
|
| -
|
| - // Factory used to obtain instance of native services.
|
| - scoped_ptr<web_intents::NativeServiceFactory> native_services_;
|
| -
|
| - // The ID of a pending extension download.
|
| - content::DownloadId download_id_;
|
| -
|
| - // Manager for a pending extension download and installation.
|
| - scoped_refptr<extensions::WebstoreInstaller> webstore_installer_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(WebIntentPickerController);
|
| -};
|
| -
|
| -#endif // CHROME_BROWSER_UI_INTENTS_WEB_INTENT_PICKER_CONTROLLER_H_
|
|
|