1d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#ifndef CONTENT_BROWSER_MEDIA_ANDROID_MEDIA_RESOURCE_GETTER_IMPL_H_ 6d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#define CONTENT_BROWSER_MEDIA_ANDROID_MEDIA_RESOURCE_GETTER_IMPL_H_ 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include <jni.h> 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <string> 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/ref_counted.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/weak_ptr.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/synchronization/waitable_event.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "media/base/android/media_resource_getter.h" 155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "media/base/android/media_url_interceptor.h" 165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "net/base/auth.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/cookies/canonical_cookie.h" 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)namespace storage { 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class FileSystemContext; 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace net { 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class URLRequestContextGetter; 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace content { 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class BrowserContext; 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ResourceContext; 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// This class implements media::MediaResourceGetter to retrieve resources 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// asynchronously on the UI thread. 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class MediaResourceGetterImpl : public media::MediaResourceGetter { 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Construct a MediaResourceGetterImpl object. |browser_context| and 37010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // |render_process_id| are passed to retrieve the CookieStore. 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // |file_system_context| are used to get the platform path. 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaResourceGetterImpl(BrowserContext* browser_context, 4003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) storage::FileSystemContext* file_system_context, 4103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) int render_process_id, 4203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) int render_frame_id); 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~MediaResourceGetterImpl(); 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // media::MediaResourceGetter implementation. 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Must be called on the UI thread. 475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual void GetAuthCredentials( 485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const GURL& url, 495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const GetAuthCredentialsCB& callback) OVERRIDE; 505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual void GetCookies( 515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const GURL& url, 525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const GURL& first_party_for_cookies, 535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const GetCookieCB& callback) OVERRIDE; 545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void GetPlatformPathFromURL( 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const GURL& url, 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const GetPlatformPathCB& callback) OVERRIDE; 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void ExtractMediaMetadata( 585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const std::string& url, 595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const std::string& cookies, 605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& user_agent, 61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const ExtractMediaMetadataCB& callback) OVERRIDE; 625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual void ExtractMediaMetadata( 635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const int fd, 645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const int64 offset, 655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const int64 size, 665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const ExtractMediaMetadataCB& callback) OVERRIDE; 67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) static bool RegisterMediaResourceGetter(JNIEnv* env); 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Called when GetAuthCredentials() finishes. 725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) void GetAuthCredentialsCallback( 735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const GetAuthCredentialsCB& callback, 745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const net::AuthCredentials& credentials); 755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Called when GetCookies() finishes. 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void GetCookiesCallback( 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const GetCookieCB& callback, const std::string& cookies); 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Called when GetPlatformPathFromFileSystemURL() finishes. 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void GetPlatformPathCallback( 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const GetPlatformPathCB& callback, const std::string& platform_path); 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // BrowserContext to retrieve URLRequestContext and ResourceContext. 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BrowserContext* browser_context_; 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // FileSystemContext to be used on FILE thread. 8803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) storage::FileSystemContext* file_system_context_; 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Render process id, used to check whether the process can access cookies. 91010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) int render_process_id_; 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 93010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Render frame id, used to check tab specific cookie policy. 94010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) int render_frame_id_; 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) // NOTE: Weak pointers must be invalidated before all other member variables. 9723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) base::WeakPtrFactory<MediaResourceGetterImpl> weak_factory_; 9823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(MediaResourceGetterImpl); 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace content 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 104d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#endif // CONTENT_BROWSER_MEDIA_ANDROID_MEDIA_RESOURCE_GETTER_IMPL_H_ 105