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

Side by Side Diff: chrome/browser/extensions/app_notify_channel_setup.cc

Issue 8400027: Add code to prompt for browser login during app notification setup (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/extensions/app_notify_channel_setup.h" 5 #include "chrome/browser/extensions/app_notify_channel_setup.h"
6 6
7 #include "base/bind.h"
7 #include "base/command_line.h" 8 #include "base/command_line.h"
8 #include "chrome/browser/prefs/pref_service.h" 9 #include "chrome/browser/prefs/pref_service.h"
9 #include "chrome/browser/profiles/profile.h" 10 #include "chrome/browser/profiles/profile.h"
10 #include "chrome/common/chrome_switches.h" 11 #include "chrome/common/chrome_switches.h"
11 #include "chrome/common/pref_names.h" 12 #include "chrome/common/pref_names.h"
12 #include "content/browser/browser_thread.h" 13 #include "content/browser/browser_thread.h"
13 #include "content/public/common/url_fetcher.h" 14 #include "content/public/common/url_fetcher.h"
14 #include "net/base/escape.h" 15 #include "net/base/escape.h"
15 #include "net/url_request/url_request_status.h" 16 #include "net/url_request/url_request_status.h"
16 17
17 AppNotifyChannelSetup::AppNotifyChannelSetup( 18 AppNotifyChannelSetup::AppNotifyChannelSetup(
18 Profile* profile, 19 Profile* profile,
19 const std::string& client_id, 20 const std::string& client_id,
20 const GURL& requestor_url, 21 const GURL& requestor_url,
21 int return_route_id, 22 int return_route_id,
22 int callback_id, 23 int callback_id,
24 AppNotifyChannelUI* ui,
23 base::WeakPtr<AppNotifyChannelSetup::Delegate> delegate) 25 base::WeakPtr<AppNotifyChannelSetup::Delegate> delegate)
24 : profile_(profile), 26 : profile_(profile),
25 client_id_(client_id), 27 client_id_(client_id),
26 requestor_url_(requestor_url), 28 requestor_url_(requestor_url),
27 return_route_id_(return_route_id), 29 return_route_id_(return_route_id),
28 callback_id_(callback_id), 30 callback_id_(callback_id),
29 delegate_(delegate) {} 31 delegate_(delegate),
32 ui_(ui) {}
30 33
31 AppNotifyChannelSetup::~AppNotifyChannelSetup() {} 34 AppNotifyChannelSetup::~AppNotifyChannelSetup() {}
32 35
33 static GURL GetChannelServerURL() { 36 static GURL GetChannelServerURL() {
34 // TODO(asargent) - Eventually we'll have a hardcoded url baked in and this 37 // TODO(asargent) - Eventually we'll have a hardcoded url baked in and this
35 // will just be an override, but for now we just have this flag as the client 38 // will just be an override, but for now we just have this flag as the client
36 // and server are both works-in-progress. 39 // and server are both works-in-progress.
37 CommandLine* command_line = CommandLine::ForCurrentProcess(); 40 CommandLine* command_line = CommandLine::ForCurrentProcess();
38 if (command_line->HasSwitch(switches::kAppNotifyChannelServerURL)) { 41 if (command_line->HasSwitch(switches::kAppNotifyChannelServerURL)) {
39 std::string switch_value = command_line->GetSwitchValueASCII( 42 std::string switch_value = command_line->GetSwitchValueASCII(
40 switches::kAppNotifyChannelServerURL); 43 switches::kAppNotifyChannelServerURL);
41 GURL result(switch_value); 44 GURL result(switch_value);
42 if (result.is_valid()) { 45 if (result.is_valid()) {
43 return result; 46 return result;
44 } else { 47 } else {
45 LOG(ERROR) << "Invalid value for " << 48 LOG(ERROR) << "Invalid value for " <<
46 switches::kAppNotifyChannelServerURL; 49 switches::kAppNotifyChannelServerURL;
47 } 50 }
48 } 51 }
49 return GURL(); 52 return GURL();
50 } 53 }
51 54
52 void AppNotifyChannelSetup::Start() { 55 void AppNotifyChannelSetup::Start() {
53 AddRef(); // Balanced in ReportResult. 56 AddRef(); // Balanced in ReportResult.
54 57
55 GURL channel_server_url = GetChannelServerURL();
56
57 // Check if the user is logged in to the browser. 58 // Check if the user is logged in to the browser.
58 std::string username = profile_->GetPrefs()->GetString( 59 std::string username = profile_->GetPrefs()->GetString(
59 prefs::kGoogleServicesUsername); 60 prefs::kGoogleServicesUsername);
60 61
61 // TODO(asargent) - If the user is not logged in, we'd like to prompt for 62 if (username.empty()) {
62 // login and if then they sign in, continue as normal. But for now just return 63 ui_->PromptSyncSetup(this);
63 // an error. We do this via PostTask instead of immediately calling back the 64 return; // We'll get called back in OnSyncSetupResult
65 }
66
67 BeginFetch();
68 }
69
70 void AppNotifyChannelSetup::OnURLFetchComplete(
71 const content::URLFetcher* source) {
72 CHECK(source);
73 net::URLRequestStatus status = source->GetStatus();
74
75 if (status.status() == net::URLRequestStatus::SUCCESS &&
76 source->GetResponseCode() == 200) {
77 // TODO(asargent) - we need to parse the response from |source| here.
78 ReportResult("dummy_do_not_use", "");
79 } else {
80 ReportResult("", "channel_service_error");
81 }
82 }
83
84 void AppNotifyChannelSetup::OnSyncSetupResult(bool enabled) {
85 if (enabled) {
86 BeginFetch();
87 } else {
88 ReportResult("", "not_available");
89 }
90 }
91
92 void AppNotifyChannelSetup::BeginFetch() {
93 GURL channel_server_url = GetChannelServerURL();
94
95 // We return the error via PostTask instead of immediately calling back the
64 // delegate because it simplifies tests. 96 // delegate because it simplifies tests.
65 if (!channel_server_url.is_valid() || username.empty()) { 97 if (!channel_server_url.is_valid()) {
98 std::string code;
Mihai Parparita -not on Chrome 2011/10/27 22:21:05 You don't seem to be using these variables.
asargent_no_longer_on_chrome 2011/10/28 17:09:22 Oops, good catch - I had moved them to be inline i
99 std::string error("not_available");
66 BrowserThread::PostTask( 100 BrowserThread::PostTask(
67 BrowserThread::UI, 101 BrowserThread::UI,
68 FROM_HERE, 102 FROM_HERE,
69 NewRunnableMethod(this, 103 base::Bind(&AppNotifyChannelSetup::ReportResult, this,
70 &AppNotifyChannelSetup::ReportResult, 104 std::string(), std::string("not_available")));
71 std::string(),
72 std::string("not_available")));
73 return; 105 return;
74 } 106 }
75 107
76 url_fetcher_.reset(content::URLFetcher::Create( 108 url_fetcher_.reset(content::URLFetcher::Create(
77 0, channel_server_url, content::URLFetcher::POST, this)); 109 0, channel_server_url, content::URLFetcher::POST, this));
78 110
79 // TODO(asargent) - we eventually want this to use the browser login 111 // TODO(asargent) - we eventually want this to use the browser login
80 // credentials instead of the regular cookie store, but for now to aid server 112 // credentials instead of the regular cookie store, but for now to aid server
81 // development, we're just using the regular cookie store. 113 // development, we're just using the regular cookie store.
82 url_fetcher_->SetRequestContext(profile_->GetRequestContext()); 114 url_fetcher_->SetRequestContext(profile_->GetRequestContext());
83 std::string data = "client_id=" + EscapeUrlEncodedData(client_id_, true); 115 std::string data = "client_id=" + EscapeUrlEncodedData(client_id_, true);
84 url_fetcher_->SetUploadData("application/x-www-form-urlencoded", data); 116 url_fetcher_->SetUploadData("application/x-www-form-urlencoded", data);
85 url_fetcher_->Start(); 117 url_fetcher_->Start();
86 } 118 }
87 119
88 void AppNotifyChannelSetup::OnURLFetchComplete(
89 const content::URLFetcher* source) {
90 CHECK(source);
91 net::URLRequestStatus status = source->GetStatus();
92
93 if (status.status() == net::URLRequestStatus::SUCCESS &&
94 source->GetResponseCode() == 200) {
95 // TODO(asargent) - we need to parse the response from |source| here.
96 ReportResult("dummy_do_not_use", "");
97 } else {
98 ReportResult("", "channel_service_error");
99 }
100 }
101
102 void AppNotifyChannelSetup::ReportResult( 120 void AppNotifyChannelSetup::ReportResult(
103 const std::string& channel_id, 121 const std::string& channel_id,
104 const std::string& error) { 122 const std::string& error) {
105 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 123 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
106 if (delegate_.get()) 124 if (delegate_.get())
107 delegate_->AppNotifyChannelSetupComplete( 125 delegate_->AppNotifyChannelSetupComplete(
108 channel_id, error, return_route_id_, callback_id_); 126 channel_id, error, return_route_id_, callback_id_);
109 Release(); // Matches AddRef in Start. 127 Release(); // Matches AddRef in Start.
110 } 128 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698