| Index: chrome/browser/extensions/app_notify_channel_setup.cc
|
| diff --git a/chrome/browser/extensions/app_notify_channel_setup.cc b/chrome/browser/extensions/app_notify_channel_setup.cc
|
| index f548ce95d136604cc98c06464d6932d4b39f5c34..e990e1a19970d464660b41a72e9ce200b9565914 100644
|
| --- a/chrome/browser/extensions/app_notify_channel_setup.cc
|
| +++ b/chrome/browser/extensions/app_notify_channel_setup.cc
|
| @@ -4,6 +4,7 @@
|
|
|
| #include "chrome/browser/extensions/app_notify_channel_setup.h"
|
|
|
| +#include "base/bind.h"
|
| #include "base/command_line.h"
|
| #include "chrome/browser/prefs/pref_service.h"
|
| #include "chrome/browser/profiles/profile.h"
|
| @@ -20,13 +21,15 @@ AppNotifyChannelSetup::AppNotifyChannelSetup(
|
| const GURL& requestor_url,
|
| int return_route_id,
|
| int callback_id,
|
| + AppNotifyChannelUI* ui,
|
| base::WeakPtr<AppNotifyChannelSetup::Delegate> delegate)
|
| : profile_(profile),
|
| client_id_(client_id),
|
| requestor_url_(requestor_url),
|
| return_route_id_(return_route_id),
|
| callback_id_(callback_id),
|
| - delegate_(delegate) {}
|
| + delegate_(delegate),
|
| + ui_(ui) {}
|
|
|
| AppNotifyChannelSetup::~AppNotifyChannelSetup() {}
|
|
|
| @@ -52,24 +55,51 @@ static GURL GetChannelServerURL() {
|
| void AppNotifyChannelSetup::Start() {
|
| AddRef(); // Balanced in ReportResult.
|
|
|
| - GURL channel_server_url = GetChannelServerURL();
|
| -
|
| // Check if the user is logged in to the browser.
|
| std::string username = profile_->GetPrefs()->GetString(
|
| prefs::kGoogleServicesUsername);
|
|
|
| - // TODO(asargent) - If the user is not logged in, we'd like to prompt for
|
| - // login and if then they sign in, continue as normal. But for now just return
|
| - // an error. We do this via PostTask instead of immediately calling back the
|
| + if (username.empty()) {
|
| + ui_->PromptSyncSetup(this);
|
| + return; // We'll get called back in OnSyncSetupResult
|
| + }
|
| +
|
| + BeginFetch();
|
| +}
|
| +
|
| +void AppNotifyChannelSetup::OnURLFetchComplete(
|
| + const content::URLFetcher* source) {
|
| + CHECK(source);
|
| + net::URLRequestStatus status = source->GetStatus();
|
| +
|
| + if (status.status() == net::URLRequestStatus::SUCCESS &&
|
| + source->GetResponseCode() == 200) {
|
| + // TODO(asargent) - we need to parse the response from |source| here.
|
| + ReportResult("dummy_do_not_use", "");
|
| + } else {
|
| + ReportResult("", "channel_service_error");
|
| + }
|
| +}
|
| +
|
| +void AppNotifyChannelSetup::OnSyncSetupResult(bool enabled) {
|
| + if (enabled) {
|
| + BeginFetch();
|
| + } else {
|
| + ReportResult("", "not_available");
|
| + }
|
| +}
|
| +
|
| +void AppNotifyChannelSetup::BeginFetch() {
|
| + GURL channel_server_url = GetChannelServerURL();
|
| +
|
| + // We return the error via PostTask instead of immediately calling back the
|
| // delegate because it simplifies tests.
|
| - if (!channel_server_url.is_valid() || username.empty()) {
|
| + if (!channel_server_url.is_valid()) {
|
| BrowserThread::PostTask(
|
| BrowserThread::UI,
|
| FROM_HERE,
|
| - NewRunnableMethod(this,
|
| - &AppNotifyChannelSetup::ReportResult,
|
| - std::string(),
|
| - std::string("not_available")));
|
| + base::Bind(&AppNotifyChannelSetup::ReportResult, this,
|
| + std::string(), std::string("not_available")));
|
| return;
|
| }
|
|
|
| @@ -85,20 +115,6 @@ void AppNotifyChannelSetup::Start() {
|
| url_fetcher_->Start();
|
| }
|
|
|
| -void AppNotifyChannelSetup::OnURLFetchComplete(
|
| - const content::URLFetcher* source) {
|
| - CHECK(source);
|
| - net::URLRequestStatus status = source->GetStatus();
|
| -
|
| - if (status.status() == net::URLRequestStatus::SUCCESS &&
|
| - source->GetResponseCode() == 200) {
|
| - // TODO(asargent) - we need to parse the response from |source| here.
|
| - ReportResult("dummy_do_not_use", "");
|
| - } else {
|
| - ReportResult("", "channel_service_error");
|
| - }
|
| -}
|
| -
|
| void AppNotifyChannelSetup::ReportResult(
|
| const std::string& channel_id,
|
| const std::string& error) {
|
|
|