| 
									
										
										
										
											2014-10-31 11:17:05 -07:00
										 |  |  | // Copyright (c) 2014 GitHub, Inc.
 | 
					
						
							| 
									
										
										
										
											2014-08-13 12:12:43 +08:00
										 |  |  | // Use of this source code is governed by the MIT license that can be
 | 
					
						
							|  |  |  | // found in the LICENSE file.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "atom/browser/atom_access_token_store.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-20 13:24:45 -07:00
										 |  |  | #include <string>
 | 
					
						
							| 
									
										
										
										
											2014-08-13 14:43:21 +08:00
										 |  |  | #include <utility>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-10-08 18:27:39 +08:00
										 |  |  | #include "atom/common/google_api_key.h"
 | 
					
						
							| 
									
										
										
										
											2016-09-20 12:01:59 -07:00
										 |  |  | #include "base/environment.h"
 | 
					
						
							| 
									
										
										
										
											2016-06-22 15:41:56 +09:00
										 |  |  | #include "content/public/browser/browser_thread.h"
 | 
					
						
							| 
									
										
										
										
											2016-11-09 07:50:03 +00:00
										 |  |  | #include "device/geolocation/geolocation_provider.h"
 | 
					
						
							| 
									
										
										
										
											2017-03-14 21:08:10 +05:30
										 |  |  | #include "net/url_request/url_request_context.h"
 | 
					
						
							|  |  |  | #include "net/url_request/url_request_context_builder.h"
 | 
					
						
							|  |  |  | #include "net/url_request/url_request_context_getter.h"
 | 
					
						
							| 
									
										
										
										
											2014-08-13 13:28:05 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-09 17:48:11 +05:30
										 |  |  | using content::BrowserThread; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-08-13 12:12:43 +08:00
										 |  |  | namespace atom { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-15 01:00:54 +05:30
										 |  |  | namespace internal { | 
					
						
							| 
									
										
										
										
											2014-08-13 13:28:05 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-14 21:08:10 +05:30
										 |  |  | class GeoURLRequestContextGetter : public net::URLRequestContextGetter { | 
					
						
							| 
									
										
										
										
											2016-09-09 17:48:11 +05:30
										 |  |  |  public: | 
					
						
							| 
									
										
										
										
											2017-03-14 21:08:10 +05:30
										 |  |  |   net::URLRequestContext* GetURLRequestContext() override { | 
					
						
							|  |  |  |     DCHECK_CURRENTLY_ON(BrowserThread::IO); | 
					
						
							|  |  |  |     if (!url_request_context_.get()) { | 
					
						
							|  |  |  |       net::URLRequestContextBuilder builder; | 
					
						
							|  |  |  |       builder.set_proxy_config_service( | 
					
						
							|  |  |  |           net::ProxyService::CreateSystemProxyConfigService( | 
					
						
							| 
									
										
										
										
											2017-08-23 21:55:46 +03:00
										 |  |  |               BrowserThread::GetTaskRunnerForThread(BrowserThread::IO))); | 
					
						
							| 
									
										
										
										
											2017-03-14 21:08:10 +05:30
										 |  |  |       url_request_context_ = builder.Build(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     return url_request_context_.get(); | 
					
						
							| 
									
										
										
										
											2016-09-09 17:48:11 +05:30
										 |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-14 21:08:10 +05:30
										 |  |  |   scoped_refptr<base::SingleThreadTaskRunner> GetNetworkTaskRunner() | 
					
						
							|  |  |  |       const override { | 
					
						
							|  |  |  |     return BrowserThread::GetTaskRunnerForThread(BrowserThread::IO); | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2016-10-15 01:00:54 +05:30
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-14 21:08:10 +05:30
										 |  |  |  private: | 
					
						
							|  |  |  |   friend class atom::AtomAccessTokenStore; | 
					
						
							| 
									
										
										
										
											2016-10-15 01:00:54 +05:30
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-14 21:08:10 +05:30
										 |  |  |   GeoURLRequestContextGetter() {} | 
					
						
							|  |  |  |   ~GeoURLRequestContextGetter() override {} | 
					
						
							| 
									
										
										
										
											2016-09-09 17:48:11 +05:30
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-14 21:08:10 +05:30
										 |  |  |   std::unique_ptr<net::URLRequestContext> url_request_context_; | 
					
						
							|  |  |  |   DISALLOW_COPY_AND_ASSIGN(GeoURLRequestContextGetter); | 
					
						
							| 
									
										
										
										
											2016-09-09 17:48:11 +05:30
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-15 01:00:54 +05:30
										 |  |  | }  // namespace internal
 | 
					
						
							| 
									
										
										
										
											2014-08-13 13:28:05 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-14 21:08:10 +05:30
										 |  |  | AtomAccessTokenStore::AtomAccessTokenStore() | 
					
						
							|  |  |  |     : request_context_getter_(new internal::GeoURLRequestContextGetter) { | 
					
						
							| 
									
										
										
										
											2016-11-09 07:50:03 +00:00
										 |  |  |   device::GeolocationProvider::GetInstance()->UserDidOptIntoLocationServices(); | 
					
						
							| 
									
										
										
										
											2014-08-13 12:12:43 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | AtomAccessTokenStore::~AtomAccessTokenStore() { | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void AtomAccessTokenStore::LoadAccessTokens( | 
					
						
							| 
									
										
										
										
											2016-04-27 13:59:46 -04:00
										 |  |  |     const LoadAccessTokensCallback& callback) { | 
					
						
							| 
									
										
										
										
											2017-03-14 21:08:10 +05:30
										 |  |  |   std::unique_ptr<base::Environment> env(base::Environment::Create()); | 
					
						
							|  |  |  |   std::string api_key; | 
					
						
							|  |  |  |   if (!env->GetVar("GOOGLE_API_KEY", &api_key)) | 
					
						
							|  |  |  |     api_key = GOOGLEAPIS_API_KEY; | 
					
						
							|  |  |  |   // Equivalent to access_token_map[kGeolocationProviderURL].
 | 
					
						
							|  |  |  |   // Somehow base::string16 is causing compilation errors when used in a pair
 | 
					
						
							|  |  |  |   // of std::map on Linux, this can work around it.
 | 
					
						
							|  |  |  |   device::AccessTokenStore::AccessTokenMap access_token_map; | 
					
						
							|  |  |  |   std::pair<GURL, base::string16> token_pair; | 
					
						
							|  |  |  |   token_pair.first = GURL(GOOGLEAPIS_ENDPOINT + api_key); | 
					
						
							|  |  |  |   access_token_map.insert(token_pair); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   callback.Run(access_token_map, request_context_getter_.get()); | 
					
						
							| 
									
										
										
										
											2016-06-22 15:41:56 +09:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void AtomAccessTokenStore::SaveAccessToken(const GURL& server_url, | 
					
						
							|  |  |  |                                            const base::string16& access_token) { | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-08-13 12:12:43 +08:00
										 |  |  | }  // namespace atom
 |