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

Side by Side Diff: content/browser/media/android/media_resource_getter_impl.cc

Issue 405663002: Support basic authentication for html5 media (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 5 months 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "content/browser/media/android/media_resource_getter_impl.h" 5 #include "content/browser/media/android/media_resource_getter_impl.h"
6 6
7 #include "base/android/jni_android.h" 7 #include "base/android/jni_android.h"
8 #include "base/android/jni_string.h" 8 #include "base/android/jni_string.h"
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/path_service.h" 10 #include "base/path_service.h"
11 #include "base/threading/sequenced_worker_pool.h" 11 #include "base/threading/sequenced_worker_pool.h"
12 #include "content/browser/child_process_security_policy_impl.h" 12 #include "content/browser/child_process_security_policy_impl.h"
13 #include "content/browser/fileapi/browser_file_system_helper.h" 13 #include "content/browser/fileapi/browser_file_system_helper.h"
14 #include "content/browser/fileapi/chrome_blob_storage_context.h" 14 #include "content/browser/fileapi/chrome_blob_storage_context.h"
15 #include "content/public/browser/browser_context.h" 15 #include "content/public/browser/browser_context.h"
16 #include "content/public/browser/browser_thread.h" 16 #include "content/public/browser/browser_thread.h"
17 #include "content/public/browser/content_browser_client.h" 17 #include "content/public/browser/content_browser_client.h"
18 #include "content/public/common/content_client.h" 18 #include "content/public/common/content_client.h"
19 #include "content/public/common/url_constants.h" 19 #include "content/public/common/url_constants.h"
20 #include "jni/MediaResourceGetter_jni.h" 20 #include "jni/MediaResourceGetter_jni.h"
21 #include "net/base/auth.h"
21 #include "net/cookies/cookie_monster.h" 22 #include "net/cookies/cookie_monster.h"
22 #include "net/cookies/cookie_store.h" 23 #include "net/cookies/cookie_store.h"
24 #include "net/http/http_auth.h"
25 #include "net/http/http_transaction_factory.h"
23 #include "net/url_request/url_request_context.h" 26 #include "net/url_request/url_request_context.h"
24 #include "net/url_request/url_request_context_getter.h" 27 #include "net/url_request/url_request_context_getter.h"
25 #include "url/gurl.h" 28 #include "url/gurl.h"
26 #include "webkit/browser/blob/blob_data_handle.h" 29 #include "webkit/browser/blob/blob_data_handle.h"
27 #include "webkit/browser/blob/blob_storage_context.h" 30 #include "webkit/browser/blob/blob_storage_context.h"
28 31
29 using base::android::ConvertUTF8ToJavaString; 32 using base::android::ConvertUTF8ToJavaString;
30 using base::android::ScopedJavaLocalRef; 33 using base::android::ScopedJavaLocalRef;
31 34
32 namespace content { 35 namespace content {
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
97 BrowserThread::PostTask( 100 BrowserThread::PostTask(
98 BrowserThread::UI, FROM_HERE, 101 BrowserThread::UI, FROM_HERE,
99 base::Bind(callback, base::TimeDelta::FromMilliseconds( 102 base::Bind(callback, base::TimeDelta::FromMilliseconds(
100 Java_MediaMetadata_getDurationInMilliseconds( 103 Java_MediaMetadata_getDurationInMilliseconds(
101 env, j_metadata.obj())), 104 env, j_metadata.obj())),
102 Java_MediaMetadata_getWidth(env, j_metadata.obj()), 105 Java_MediaMetadata_getWidth(env, j_metadata.obj()),
103 Java_MediaMetadata_getHeight(env, j_metadata.obj()), 106 Java_MediaMetadata_getHeight(env, j_metadata.obj()),
104 Java_MediaMetadata_isSuccess(env, j_metadata.obj()))); 107 Java_MediaMetadata_isSuccess(env, j_metadata.obj())));
105 } 108 }
106 109
107 // The task object that retrieves cookie on the IO thread. 110 // The task object that retrieves media resources on the IO thread.
108 // TODO(qinmin): refactor this class to make the code reusable by others as 111 // TODO(qinmin): refactor this class to make the code reusable by others as
109 // there are lots of duplicated functionalities elsewhere. 112 // there are lots of duplicated functionalities elsewhere.
xhwang 2014/07/21 19:45:44 Is there a bug tracking this?
qinmin 2014/07/21 20:37:57 Done.
110 class CookieGetterTask 113 class MediaResourceGetterTask
111 : public base::RefCountedThreadSafe<CookieGetterTask> { 114 : public base::RefCountedThreadSafe<MediaResourceGetterTask> {
112 public: 115 public:
113 CookieGetterTask(BrowserContext* browser_context, 116 MediaResourceGetterTask(BrowserContext* browser_context,
114 int render_process_id, int render_frame_id); 117 int render_process_id, int render_frame_id);
115 118
116 // Called by CookieGetterImpl to start getting cookies for a URL. 119 // Called by MediaResourceGetterImpl to start getting auth credentials.
120 net::AuthCredentials RequestAuthCredentials(const GURL& url) const;
121
122 // Called by MediaResourceGetterImpl to start getting cookies for a URL.
117 void RequestCookies( 123 void RequestCookies(
118 const GURL& url, const GURL& first_party_for_cookies, 124 const GURL& url, const GURL& first_party_for_cookies,
119 const media::MediaResourceGetter::GetCookieCB& callback); 125 const media::MediaResourceGetter::GetCookieCB& callback);
120 126
121 private: 127 private:
122 friend class base::RefCountedThreadSafe<CookieGetterTask>; 128 friend class base::RefCountedThreadSafe<MediaResourceGetterTask>;
123 virtual ~CookieGetterTask(); 129 virtual ~MediaResourceGetterTask();
124 130
125 void CheckPolicyForCookies( 131 void CheckPolicyForCookies(
126 const GURL& url, const GURL& first_party_for_cookies, 132 const GURL& url, const GURL& first_party_for_cookies,
127 const media::MediaResourceGetter::GetCookieCB& callback, 133 const media::MediaResourceGetter::GetCookieCB& callback,
128 const net::CookieList& cookie_list); 134 const net::CookieList& cookie_list);
129 135
130 // Context getter used to get the CookieStore. 136 // Context getter used to get the CookieStore and auth cache.
131 net::URLRequestContextGetter* context_getter_; 137 net::URLRequestContextGetter* context_getter_;
132 138
133 // Resource context for checking cookie policies. 139 // Resource context for checking cookie policies.
134 ResourceContext* resource_context_; 140 ResourceContext* resource_context_;
135 141
136 // Render process id, used to check whether the process can access cookies. 142 // Render process id, used to check whether the process can access cookies.
137 int render_process_id_; 143 int render_process_id_;
138 144
139 // Render frame id, used to check tab specific cookie policy. 145 // Render frame id, used to check tab specific cookie policy.
140 int render_frame_id_; 146 int render_frame_id_;
141 147
142 DISALLOW_COPY_AND_ASSIGN(CookieGetterTask); 148 DISALLOW_COPY_AND_ASSIGN(MediaResourceGetterTask);
143 }; 149 };
144 150
145 CookieGetterTask::CookieGetterTask( 151 MediaResourceGetterTask::MediaResourceGetterTask(
146 BrowserContext* browser_context, int render_process_id, int render_frame_id) 152 BrowserContext* browser_context, int render_process_id, int render_frame_id)
147 : context_getter_(browser_context->GetRequestContext()), 153 : context_getter_(browser_context->GetRequestContext()),
148 resource_context_(browser_context->GetResourceContext()), 154 resource_context_(browser_context->GetResourceContext()),
149 render_process_id_(render_process_id), 155 render_process_id_(render_process_id),
150 render_frame_id_(render_frame_id) { 156 render_frame_id_(render_frame_id) {
151 } 157 }
152 158
153 CookieGetterTask::~CookieGetterTask() {} 159 MediaResourceGetterTask::~MediaResourceGetterTask() {}
154 160
155 void CookieGetterTask::RequestCookies( 161 net::AuthCredentials MediaResourceGetterTask::RequestAuthCredentials(
162 const GURL& url) const {
163 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
164 net::HttpTransactionFactory* factory =
165 context_getter_->GetURLRequestContext()->http_transaction_factory();
166 if (!factory)
167 return net::AuthCredentials();
168
169 net::HttpAuthCache* auth_cache =
170 factory->GetSession()->http_auth_cache();
171 if (!auth_cache)
172 return net::AuthCredentials();
173
174 net::HttpAuthCache::Entry* entry =
175 auth_cache->LookupByPath(url.GetOrigin(), url.path());
176
177 // TODO(qinmin): handle other auth schemes. See http://crbug.com/395219.
178 if (entry && entry->scheme() == net::HttpAuth::AUTH_SCHEME_BASIC)
179 return entry->credentials();
180 else
181 return net::AuthCredentials();
182 }
183
184 void MediaResourceGetterTask::RequestCookies(
156 const GURL& url, const GURL& first_party_for_cookies, 185 const GURL& url, const GURL& first_party_for_cookies,
157 const media::MediaResourceGetter::GetCookieCB& callback) { 186 const media::MediaResourceGetter::GetCookieCB& callback) {
158 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 187 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
159 ChildProcessSecurityPolicyImpl* policy = 188 ChildProcessSecurityPolicyImpl* policy =
160 ChildProcessSecurityPolicyImpl::GetInstance(); 189 ChildProcessSecurityPolicyImpl::GetInstance();
161 if (!policy->CanAccessCookiesForOrigin(render_process_id_, url)) { 190 if (!policy->CanAccessCookiesForOrigin(render_process_id_, url)) {
162 callback.Run(std::string()); 191 callback.Run(std::string());
163 return; 192 return;
164 } 193 }
165 194
166 net::CookieStore* cookie_store = 195 net::CookieStore* cookie_store =
167 context_getter_->GetURLRequestContext()->cookie_store(); 196 context_getter_->GetURLRequestContext()->cookie_store();
168 if (!cookie_store) { 197 if (!cookie_store) {
169 callback.Run(std::string()); 198 callback.Run(std::string());
170 return; 199 return;
171 } 200 }
172 201
173 net::CookieMonster* cookie_monster = cookie_store->GetCookieMonster(); 202 net::CookieMonster* cookie_monster = cookie_store->GetCookieMonster();
174 if (cookie_monster) { 203 if (cookie_monster) {
175 cookie_monster->GetAllCookiesForURLAsync(url, base::Bind( 204 cookie_monster->GetAllCookiesForURLAsync(url, base::Bind(
176 &CookieGetterTask::CheckPolicyForCookies, this, 205 &MediaResourceGetterTask::CheckPolicyForCookies, this,
177 url, first_party_for_cookies, callback)); 206 url, first_party_for_cookies, callback));
178 } else { 207 } else {
179 callback.Run(std::string()); 208 callback.Run(std::string());
180 } 209 }
181 } 210 }
182 211
183 void CookieGetterTask::CheckPolicyForCookies( 212 void MediaResourceGetterTask::CheckPolicyForCookies(
184 const GURL& url, const GURL& first_party_for_cookies, 213 const GURL& url, const GURL& first_party_for_cookies,
185 const media::MediaResourceGetter::GetCookieCB& callback, 214 const media::MediaResourceGetter::GetCookieCB& callback,
186 const net::CookieList& cookie_list) { 215 const net::CookieList& cookie_list) {
187 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 216 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
188 if (GetContentClient()->browser()->AllowGetCookie( 217 if (GetContentClient()->browser()->AllowGetCookie(
189 url, first_party_for_cookies, cookie_list, 218 url, first_party_for_cookies, cookie_list,
190 resource_context_, render_process_id_, render_frame_id_)) { 219 resource_context_, render_process_id_, render_frame_id_)) {
191 net::CookieStore* cookie_store = 220 net::CookieStore* cookie_store =
192 context_getter_->GetURLRequestContext()->cookie_store(); 221 context_getter_->GetURLRequestContext()->cookie_store();
193 net::CookieOptions options; 222 net::CookieOptions options;
(...skipping 10 matching lines...) Expand all
204 int render_process_id, 233 int render_process_id,
205 int render_frame_id) 234 int render_frame_id)
206 : browser_context_(browser_context), 235 : browser_context_(browser_context),
207 file_system_context_(file_system_context), 236 file_system_context_(file_system_context),
208 render_process_id_(render_process_id), 237 render_process_id_(render_process_id),
209 render_frame_id_(render_frame_id), 238 render_frame_id_(render_frame_id),
210 weak_factory_(this) {} 239 weak_factory_(this) {}
211 240
212 MediaResourceGetterImpl::~MediaResourceGetterImpl() {} 241 MediaResourceGetterImpl::~MediaResourceGetterImpl() {}
213 242
243 void MediaResourceGetterImpl::GetAuthCredentials(
244 const GURL& url, const GetAuthCredentialsCB& callback) {
245 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
246 scoped_refptr<MediaResourceGetterTask> task = new MediaResourceGetterTask(
247 browser_context_, 0, 0);
248
249 BrowserThread::PostTaskAndReplyWithResult(
250 BrowserThread::IO,
251 FROM_HERE,
252 base::Bind(&MediaResourceGetterTask::RequestAuthCredentials, task, url),
253 base::Bind(&MediaResourceGetterImpl::GetAuthCredentialsCallback,
254 weak_factory_.GetWeakPtr(), callback));
255 }
256
214 void MediaResourceGetterImpl::GetCookies( 257 void MediaResourceGetterImpl::GetCookies(
215 const GURL& url, const GURL& first_party_for_cookies, 258 const GURL& url, const GURL& first_party_for_cookies,
216 const GetCookieCB& callback) { 259 const GetCookieCB& callback) {
217 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 260 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
218 scoped_refptr<CookieGetterTask> task = new CookieGetterTask( 261 scoped_refptr<MediaResourceGetterTask> task = new MediaResourceGetterTask(
219 browser_context_, render_process_id_, render_frame_id_); 262 browser_context_, render_process_id_, render_frame_id_);
220 263
221 GetCookieCB cb = base::Bind(&MediaResourceGetterImpl::GetCookiesCallback, 264 GetCookieCB cb = base::Bind(&MediaResourceGetterImpl::GetCookiesCallback,
222 weak_factory_.GetWeakPtr(), 265 weak_factory_.GetWeakPtr(),
223 callback); 266 callback);
224 BrowserThread::PostTask( 267 BrowserThread::PostTask(
225 BrowserThread::IO, 268 BrowserThread::IO,
226 FROM_HERE, 269 FROM_HERE,
227 base::Bind(&CookieGetterTask::RequestCookies, 270 base::Bind(&MediaResourceGetterTask::RequestCookies,
228 task, url, first_party_for_cookies, 271 task, url, first_party_for_cookies,
229 base::Bind(&ReturnResultOnUIThread, cb))); 272 base::Bind(&ReturnResultOnUIThread, cb)));
230 } 273 }
231 274
275 void MediaResourceGetterImpl::GetAuthCredentialsCallback(
276 const GetAuthCredentialsCB& callback,
277 const net::AuthCredentials& credentials) {
278 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
279 callback.Run(credentials.username(), credentials.password());
280 }
281
232 void MediaResourceGetterImpl::GetCookiesCallback( 282 void MediaResourceGetterImpl::GetCookiesCallback(
233 const GetCookieCB& callback, const std::string& cookies) { 283 const GetCookieCB& callback, const std::string& cookies) {
234 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 284 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
235 callback.Run(cookies); 285 callback.Run(cookies);
236 } 286 }
237 287
238 void MediaResourceGetterImpl::GetPlatformPathFromURL( 288 void MediaResourceGetterImpl::GetPlatformPathFromURL(
239 const GURL& url, const GetPlatformPathCB& callback) { 289 const GURL& url, const GetPlatformPathCB& callback) {
240 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 290 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
241 DCHECK(url.SchemeIsFileSystem() || url.SchemeIs(url::kBlobScheme)); 291 DCHECK(url.SchemeIsFileSystem() || url.SchemeIs(url::kBlobScheme));
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
276 FROM_HERE, 326 FROM_HERE,
277 base::Bind(&GetMediaMetadata, url, cookies, user_agent, callback)); 327 base::Bind(&GetMediaMetadata, url, cookies, user_agent, callback));
278 } 328 }
279 329
280 // static 330 // static
281 bool MediaResourceGetterImpl::RegisterMediaResourceGetter(JNIEnv* env) { 331 bool MediaResourceGetterImpl::RegisterMediaResourceGetter(JNIEnv* env) {
282 return RegisterNativesImpl(env); 332 return RegisterNativesImpl(env);
283 } 333 }
284 334
285 } // namespace content 335 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/media/android/media_resource_getter_impl.h ('k') | content/renderer/media/android/webmediaplayer_android.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698