Index: chrome/browser/extensions/api/identity/web_auth_flow.h |
diff --git a/chrome/browser/extensions/api/identity/web_auth_flow.h b/chrome/browser/extensions/api/identity/web_auth_flow.h |
index dd5eed8dfac79af15b929de1a9f3e1fb65bc4ae8..352a73f39d5b2f3f744ca8ee7bc8b05e62d51ff2 100644 |
--- a/chrome/browser/extensions/api/identity/web_auth_flow.h |
+++ b/chrome/browser/extensions/api/identity/web_auth_flow.h |
@@ -5,7 +5,9 @@ |
#ifndef CHROME_BROWSER_EXTENSIONS_API_IDENTITY_WEB_AUTH_FLOW_H_ |
#define CHROME_BROWSER_EXTENSIONS_API_IDENTITY_WEB_AUTH_FLOW_H_ |
-#include "chrome/browser/ui/host_desktop.h" |
+#include <string> |
+ |
+#include "chrome/browser/extensions/shell_window_registry.h" |
#include "content/public/browser/notification_observer.h" |
#include "content/public/browser/notification_registrar.h" |
#include "content/public/browser/web_contents_observer.h" |
@@ -38,7 +40,8 @@ namespace extensions { |
// A WebAuthFlow can be started in Mode::SILENT, which never displays |
// a window. If a window would be required, the flow fails. |
class WebAuthFlow : public content::NotificationObserver, |
- public content::WebContentsObserver { |
+ public content::WebContentsObserver, |
+ public ShellWindowRegistry::Observer { |
public: |
enum Mode { |
INTERACTIVE, // Show UI to the user if necessary. |
@@ -47,9 +50,12 @@ class WebAuthFlow : public content::NotificationObserver, |
enum Failure { |
WINDOW_CLOSED, // Window closed by user. |
- INTERACTION_REQUIRED // Non-redirect page load in silent mode. |
+ INTERACTION_REQUIRED, // Non-redirect page load in silent mode. |
+ LOAD_FAILED // A page failed to load. |
}; |
+ // Clients of the WebAuthFlow implement this interface to learn the |
+ // outcome of the flow. |
class Delegate { |
public: |
// Called when the auth flow fails. This means that the flow did not result |
@@ -58,6 +64,9 @@ class WebAuthFlow : public content::NotificationObserver, |
// Called on redirects and other navigations to see if the URL should stop |
// the flow. |
virtual void OnAuthFlowURLChange(const GURL& redirect_url) = 0; |
+ // Called when the flow has been completely closed and it is safe to |
+ // delete the object. |
+ virtual void OnAuthFlowClosed() = 0; |
protected: |
virtual ~Delegate() {} |
@@ -68,18 +77,16 @@ class WebAuthFlow : public content::NotificationObserver, |
WebAuthFlow(Delegate* delegate, |
Profile* profile, |
const GURL& provider_url, |
- Mode mode, |
- const gfx::Rect& initial_bounds, |
- chrome::HostDesktopType host_desktop_type); |
+ Mode mode); |
virtual ~WebAuthFlow(); |
// Starts the flow. |
virtual void Start(); |
- protected: |
- // Overridable for testing. |
- virtual content::WebContents* CreateWebContents(); |
- virtual void ShowAuthFlowPopup(); |
+ // Stops the flow and closes the window. After this function returns, the |
+ // delegate will not be called again, except for a final call to |
+ // OnAuthFlowClosed. |
+ virtual void Close(); |
private: |
friend class ::WebAuthFlowTest; |
@@ -90,26 +97,50 @@ class WebAuthFlow : public content::NotificationObserver, |
const content::NotificationDetails& details) OVERRIDE; |
// WebContentsObserver implementation. |
- virtual void ProvisionalChangeToMainFrameUrl( |
- const GURL& url, |
+ virtual void RenderViewGone(base::TerminationStatus status) OVERRIDE; |
+ virtual void DidStartProvisionalLoadForFrame( |
+ int64 frame_id, |
+ int64 parent_frame_id, |
+ bool is_main_frame, |
+ const GURL& validated_url, |
+ bool is_error_page, |
+ bool is_iframe_srcdoc, |
+ content::RenderViewHost* render_view_host) OVERRIDE; |
+ virtual void DidFailProvisionalLoad( |
+ int64 frame_id, |
+ bool is_main_frame, |
+ const GURL& validated_url, |
+ int error_code, |
+ const string16& error_description, |
content::RenderViewHost* render_view_host) OVERRIDE; |
+ virtual void DidFailLoad(int64 frame_id, |
+ const GURL& validated_url, |
+ bool is_main_frame, |
+ int error_code, |
+ const string16& error_description, |
+ content::RenderViewHost* render_view_host) OVERRIDE; |
virtual void DidStopLoading( |
content::RenderViewHost* render_view_host) OVERRIDE; |
- virtual void WebContentsDestroyed( |
- content::WebContents* web_contents) OVERRIDE; |
+ |
+ // ShellWindowRegistry::Observer implementation. |
+ virtual void OnShellWindowAdded(ShellWindow* shell_window) OVERRIDE; |
+ virtual void OnShellWindowIconChanged(ShellWindow* shell_window) OVERRIDE {} |
+ virtual void OnShellWindowRemoved(ShellWindow* shell_window) OVERRIDE; |
void BeforeUrlLoaded(const GURL& url); |
void AfterUrlLoaded(); |
+ void DeferredClose(); |
Delegate* delegate_; |
+ bool closed_; |
Profile* profile_; |
GURL provider_url_; |
Mode mode_; |
- gfx::Rect initial_bounds_; |
- chrome::HostDesktopType host_desktop_type_; |
- bool popup_shown_; |
+ bool shell_window_loaded_; |
+ |
+ ShellWindow* shell_window_; |
+ std::string shell_window_key_; |
- content::WebContents* contents_; |
content::NotificationRegistrar registrar_; |
DISALLOW_COPY_AND_ASSIGN(WebAuthFlow); |