Index: chrome/browser/extensions/api/identity/extension_auth_flow.cc |
=================================================================== |
--- chrome/browser/extensions/api/identity/extension_auth_flow.cc (revision 0) |
+++ chrome/browser/extensions/api/identity/extension_auth_flow.cc (revision 0) |
@@ -0,0 +1,88 @@ |
+// 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. |
+ |
+#include "chrome/browser/extensions/api/identity/extension_auth_flow.h" |
+ |
+#include "base/string_util.h" |
+#include "content\public\browser\navigation_controller.h" |
+#include "ipc/ipc_message.h" |
+ |
+using content::BrowserContext; |
+using content::WebContents; |
+using content::WebContentsDelegate; |
+using views::View; |
+using views::WebView; |
+using views::Widget; |
+using views::WidgetDelegate; |
+ |
+namespace extensions { |
+ |
+ExtensionAuthFlow::ExtensionAuthFlow( |
+ Delegate* delegate, |
+ content::BrowserContext* browser_context, |
+ const std::string& extension_id, |
+ const GURL& provider_url) |
+ : delegate_(delegate), |
+ browser_context_(browser_context), |
+ extension_id_(extension_id), |
+ provider_url_(provider_url) { |
+} |
+ |
+void ExtensionAuthFlow::Start() { |
+ contents_.reset(WebContents::Create( |
+ browser_context_, NULL, MSG_ROUTING_NONE, NULL, NULL)); |
+ contents_->SetDelegate(this); |
+ contents_->GetController().LoadURL( |
+ provider_url_, |
+ content::Referrer(), |
+ content::PAGE_TRANSITION_START_PAGE, |
+ std::string()); |
+} |
+ |
+void ExtensionAuthFlow::LoadingStateChanged(WebContents* source) { |
+ if (source->IsLoading()) |
+ return; |
+ OnProviderUrlLoaded(); |
+} |
+ |
+void ExtensionAuthFlow::OnProviderUrlLoaded() { |
+ GURL url = contents_->GetURL(); |
+ if (StartsWithASCII(url.spec(), "http://munjalsample.appspot.com", false)) { |
+ // if (widget_.get()) |
+ // widget_->Close(); |
+ result_ = url; |
+ ReportResult(); |
+ return; |
+ } |
+ web_view_.reset(new WebView(browser_context_)); |
+ web_view_->SetWebContents(contents_.get()); |
+ widget_.reset(Widget::CreateWindow(this)); |
+ widget_->SetSize(gfx::Size(800, 600)); |
+ widget_->Show(); |
+} |
+ |
+View* ExtensionAuthFlow::GetContentsView() { |
+ CHECK(web_view_.get()); |
+ return web_view_.get(); |
+} |
+ |
+Widget* ExtensionAuthFlow::GetWidget() { |
+ CHECK(web_view_.get()); |
+ return web_view_->GetWidget(); |
+} |
+ |
+const Widget* ExtensionAuthFlow::GetWidget() const { |
+ CHECK(web_view_.get()); |
+ return web_view_->GetWidget(); |
+} |
+ |
+void ExtensionAuthFlow::WindowClosing() { |
+} |
+ |
+void ExtensionAuthFlow::ReportResult() { |
+ if (delegate_) |
+ delegate_->OnAuthFlowCompleted(result_.spec()); |
+} |
+ |
+} // namespace extensions |