OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/local_discovery/privetv3_session.h" | 5 #include "chrome/browser/local_discovery/privetv3_session.h" |
6 | 6 |
7 #include "base/json/json_writer.h" | 7 #include "base/json/json_writer.h" |
8 #include "base/logging.h" | 8 #include "base/logging.h" |
9 #include "base/message_loop/message_loop.h" | 9 #include "base/message_loop/message_loop.h" |
| 10 #include "chrome/browser/local_discovery/privet_constants.h" |
10 #include "chrome/browser/local_discovery/privet_http.h" | 11 #include "chrome/browser/local_discovery/privet_http.h" |
11 #include "chrome/browser/local_discovery/privet_url_fetcher.h" | 12 #include "chrome/browser/local_discovery/privet_url_fetcher.h" |
12 #include "chrome/common/cloud_print/cloud_print_constants.h" | 13 #include "chrome/common/cloud_print/cloud_print_constants.h" |
13 #include "url/gurl.h" | 14 #include "url/gurl.h" |
14 | 15 |
15 namespace local_discovery { | 16 namespace local_discovery { |
16 | 17 |
17 namespace { | 18 namespace { |
18 | 19 |
19 const char kUrlPlaceHolder[] = "http://host/"; | 20 const char kUrlPlaceHolder[] = "http://host/"; |
20 | 21 |
21 const char kStubPrivetCode[] = "1234"; | 22 const char kStubPrivetCode[] = "1234"; |
22 | 23 |
| 24 const char kPrivetV3AuthAnonymous[] = "Privet anonymous"; |
| 25 |
23 GURL CreatePrivetURL(const std::string& path) { | 26 GURL CreatePrivetURL(const std::string& path) { |
24 GURL url(kUrlPlaceHolder); | 27 GURL url(kUrlPlaceHolder); |
25 GURL::Replacements replacements; | 28 GURL::Replacements replacements; |
26 replacements.SetPathStr(path); | 29 replacements.SetPathStr(path); |
27 return url.ReplaceComponents(replacements); | 30 return url.ReplaceComponents(replacements); |
28 } | 31 } |
29 | 32 |
30 } // namespace | 33 } // namespace |
31 | 34 |
32 class PrivetV3Session::FetcherDelegate : public PrivetURLFetcher::Delegate { | 35 class PrivetV3Session::FetcherDelegate : public PrivetURLFetcher::Delegate { |
33 public: | 36 public: |
34 FetcherDelegate(const base::WeakPtr<PrivetV3Session>& session, | 37 FetcherDelegate(const base::WeakPtr<PrivetV3Session>& session, |
| 38 const std::string& auth_token, |
35 const PrivetV3Session::MessageCallback& callback); | 39 const PrivetV3Session::MessageCallback& callback); |
36 ~FetcherDelegate() override; | 40 ~FetcherDelegate() override; |
37 | 41 |
38 // PrivetURLFetcher::Delegate methods. | 42 // PrivetURLFetcher::Delegate methods. |
| 43 std::string GetAuthToken() override; |
39 void OnNeedPrivetToken( | 44 void OnNeedPrivetToken( |
40 PrivetURLFetcher* fetcher, | 45 PrivetURLFetcher* fetcher, |
41 const PrivetURLFetcher::TokenCallback& callback) override; | 46 const PrivetURLFetcher::TokenCallback& callback) override; |
42 void OnError(PrivetURLFetcher* fetcher, | 47 void OnError(PrivetURLFetcher* fetcher, |
43 PrivetURLFetcher::ErrorType error) override; | 48 PrivetURLFetcher::ErrorType error) override; |
44 void OnParsedJson(PrivetURLFetcher* fetcher, | 49 void OnParsedJson(PrivetURLFetcher* fetcher, |
45 const base::DictionaryValue& value, | 50 const base::DictionaryValue& value, |
46 bool has_error) override; | 51 bool has_error) override; |
47 | 52 |
48 private: | 53 private: |
49 friend class PrivetV3Session; | 54 friend class PrivetV3Session; |
50 void DeleteThis(); | 55 void DeleteThis(); |
51 | 56 |
52 scoped_ptr<PrivetURLFetcher> url_fetcher_; | 57 scoped_ptr<PrivetURLFetcher> url_fetcher_; |
53 base::WeakPtr<PrivetV3Session> session_; | 58 base::WeakPtr<PrivetV3Session> session_; |
| 59 std::string auth_token_; |
54 MessageCallback callback_; | 60 MessageCallback callback_; |
55 }; | 61 }; |
56 | 62 |
57 PrivetV3Session::FetcherDelegate::FetcherDelegate( | 63 PrivetV3Session::FetcherDelegate::FetcherDelegate( |
58 const base::WeakPtr<PrivetV3Session>& session, | 64 const base::WeakPtr<PrivetV3Session>& session, |
| 65 const std::string& auth_token, |
59 const PrivetV3Session::MessageCallback& callback) | 66 const PrivetV3Session::MessageCallback& callback) |
60 : session_(session), callback_(callback) { | 67 : session_(session), auth_token_(auth_token), callback_(callback) { |
61 } | 68 } |
62 | 69 |
63 PrivetV3Session::FetcherDelegate::~FetcherDelegate() { | 70 PrivetV3Session::FetcherDelegate::~FetcherDelegate() { |
64 } | 71 } |
65 | 72 |
| 73 std::string PrivetV3Session::FetcherDelegate::GetAuthToken() { |
| 74 return auth_token_; |
| 75 } |
| 76 |
66 void PrivetV3Session::FetcherDelegate::OnNeedPrivetToken( | 77 void PrivetV3Session::FetcherDelegate::OnNeedPrivetToken( |
67 PrivetURLFetcher* fetcher, | 78 PrivetURLFetcher* fetcher, |
68 const PrivetURLFetcher::TokenCallback& callback) { | 79 const PrivetURLFetcher::TokenCallback& callback) { |
69 NOTREACHED(); | 80 NOTREACHED(); |
| 81 OnError(fetcher, PrivetURLFetcher::URL_FETCH_ERROR); |
70 } | 82 } |
71 | 83 |
72 void PrivetV3Session::FetcherDelegate::OnError( | 84 void PrivetV3Session::FetcherDelegate::OnError( |
73 PrivetURLFetcher* fetcher, | 85 PrivetURLFetcher* fetcher, |
74 PrivetURLFetcher::ErrorType error) { | 86 PrivetURLFetcher::ErrorType error) { |
75 if (session_) { | 87 if (session_) { |
76 DeleteThis(); | 88 DeleteThis(); |
77 callback_.Run(Result::STATUS_CONNECTIONERROR, base::DictionaryValue()); | 89 callback_.Run(Result::STATUS_CONNECTIONERROR, base::DictionaryValue()); |
78 } | 90 } |
79 } | 91 } |
(...skipping 16 matching lines...) Expand all Loading... |
96 } | 108 } |
97 | 109 |
98 PrivetV3Session::PrivetV3Session(scoped_ptr<PrivetHTTPClient> client) | 110 PrivetV3Session::PrivetV3Session(scoped_ptr<PrivetHTTPClient> client) |
99 : client_(client.Pass()), code_confirmed_(false), weak_ptr_factory_(this) { | 111 : client_(client.Pass()), code_confirmed_(false), weak_ptr_factory_(this) { |
100 } | 112 } |
101 | 113 |
102 PrivetV3Session::~PrivetV3Session() { | 114 PrivetV3Session::~PrivetV3Session() { |
103 } | 115 } |
104 | 116 |
105 void PrivetV3Session::Init(const InitCallback& callback) { | 117 void PrivetV3Session::Init(const InitCallback& callback) { |
| 118 privet_auth_token_ = kPrivetV3AuthAnonymous; |
| 119 |
106 // TODO: call /info. | 120 // TODO: call /info. |
107 base::MessageLoop::current()->PostDelayedTask( | 121 base::MessageLoop::current()->PostDelayedTask( |
108 FROM_HERE, | 122 FROM_HERE, |
109 base::Bind(&PrivetV3Session::RunCallback, weak_ptr_factory_.GetWeakPtr(), | 123 base::Bind(&PrivetV3Session::RunCallback, weak_ptr_factory_.GetWeakPtr(), |
110 base::Bind(callback, Result::STATUS_SUCCESS, | 124 base::Bind(callback, Result::STATUS_SUCCESS, |
111 std::vector<PairingType>( | 125 std::vector<PairingType>( |
112 1, PairingType::PAIRING_TYPE_EMBEDDEDCODE))), | 126 1, PairingType::PAIRING_TYPE_EMBEDDEDCODE))), |
113 base::TimeDelta::FromSeconds(1)); | 127 base::TimeDelta::FromSeconds(1)); |
114 } | 128 } |
115 | 129 |
(...skipping 17 matching lines...) Expand all Loading... |
133 callback.Run(Result::STATUS_BADPAIRINGCODEERROR); | 147 callback.Run(Result::STATUS_BADPAIRINGCODEERROR); |
134 } | 148 } |
135 } | 149 } |
136 | 150 |
137 void PrivetV3Session::SendMessage(const std::string& api, | 151 void PrivetV3Session::SendMessage(const std::string& api, |
138 const base::DictionaryValue& input, | 152 const base::DictionaryValue& input, |
139 const MessageCallback& callback) { | 153 const MessageCallback& callback) { |
140 if (!code_confirmed_) | 154 if (!code_confirmed_) |
141 return callback.Run(Result::STATUS_SESSIONERROR, base::DictionaryValue()); | 155 return callback.Run(Result::STATUS_SESSIONERROR, base::DictionaryValue()); |
142 | 156 |
143 FetcherDelegate* fetcher_delegate( | 157 FetcherDelegate* fetcher_delegate(new FetcherDelegate( |
144 new FetcherDelegate(weak_ptr_factory_.GetWeakPtr(), callback)); | 158 weak_ptr_factory_.GetWeakPtr(), privet_auth_token_, callback)); |
145 fetchers_.push_back(fetcher_delegate); | 159 fetchers_.push_back(fetcher_delegate); |
146 | 160 |
147 scoped_ptr<PrivetURLFetcher> url_fetcher(client_->CreateURLFetcher( | 161 scoped_ptr<PrivetURLFetcher> url_fetcher(client_->CreateURLFetcher( |
148 CreatePrivetURL(api), net::URLFetcher::POST, fetcher_delegate)); | 162 CreatePrivetURL(api), net::URLFetcher::POST, fetcher_delegate)); |
149 | 163 |
150 std::string json; | 164 std::string json; |
151 base::JSONWriter::WriteWithOptions( | 165 base::JSONWriter::WriteWithOptions( |
152 &input, base::JSONWriter::OPTIONS_PRETTY_PRINT, &json); | 166 &input, base::JSONWriter::OPTIONS_PRETTY_PRINT, &json); |
153 url_fetcher->SetUploadData(cloud_print::kContentTypeJSON, json); | 167 url_fetcher->SetUploadData(cloud_print::kContentTypeJSON, json); |
154 | 168 |
155 fetcher_delegate->url_fetcher_ = url_fetcher.Pass(); | 169 fetcher_delegate->url_fetcher_ = url_fetcher.Pass(); |
156 fetcher_delegate->url_fetcher_->V3Mode(); | 170 fetcher_delegate->url_fetcher_->V3Mode(); |
157 fetcher_delegate->url_fetcher_->Start(); | 171 fetcher_delegate->url_fetcher_->Start(); |
158 } | 172 } |
159 | 173 |
160 void PrivetV3Session::RunCallback(const base::Closure& callback) { | 174 void PrivetV3Session::RunCallback(const base::Closure& callback) { |
161 callback.Run(); | 175 callback.Run(); |
162 } | 176 } |
163 | 177 |
164 void PrivetV3Session::DeleteFetcher(const FetcherDelegate* fetcher) { | 178 void PrivetV3Session::DeleteFetcher(const FetcherDelegate* fetcher) { |
165 fetchers_.erase(std::find(fetchers_.begin(), fetchers_.end(), fetcher)); | 179 fetchers_.erase(std::find(fetchers_.begin(), fetchers_.end(), fetcher)); |
166 } | 180 } |
167 | 181 |
168 } // namespace local_discovery | 182 } // namespace local_discovery |
OLD | NEW |