| 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 |