media_resource_getter_impl.h revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
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" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/cookies/canonical_cookie.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace fileapi { 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class FileSystemContext; 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace net { 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class URLRequestContextGetter; 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace content { 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class BrowserContext; 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ResourceContext; 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// This class implements media::MediaResourceGetter to retrieve resources 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// asynchronously on the UI thread. 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class MediaResourceGetterImpl : public media::MediaResourceGetter { 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Construct a MediaResourceGetterImpl object. |browser_context| and 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // |renderer_id| are passed to retrieve the CookieStore. 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // |file_system_context| are used to get the platform path. 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaResourceGetterImpl(BrowserContext* browser_context, 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) fileapi::FileSystemContext* file_system_context, 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int renderer_id, int routing_id); 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~MediaResourceGetterImpl(); 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // media::MediaResourceGetter implementation. 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Must be called on the UI thread. 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void GetCookies(const GURL& url, 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const GURL& first_party_for_cookies, 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const GetCookieCB& callback) OVERRIDE; 475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void GetPlatformPathFromURL( 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const GURL& url, 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const GetPlatformPathCB& callback) OVERRIDE; 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void ExtractMediaMetadata( 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& url, const std::string& cookies, 525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& user_agent, 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const ExtractMediaMetadataCB& callback) OVERRIDE; 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) static bool RegisterMediaResourceGetter(JNIEnv* env); 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Called when GetCookies() finishes. 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void GetCookiesCallback( 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const GetCookieCB& callback, const std::string& cookies); 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Called when GetPlatformPathFromFileSystemURL() finishes. 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void GetPlatformPathCallback( 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const GetPlatformPathCB& callback, const std::string& platform_path); 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // BrowserContext to retrieve URLRequestContext and ResourceContext. 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BrowserContext* browser_context_; 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // FileSystemContext to be used on FILE thread. 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) fileapi::FileSystemContext* file_system_context_; 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Used to post tasks. 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::WeakPtrFactory<MediaResourceGetterImpl> weak_this_; 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Render process id, used to check whether the process can access cookies. 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int renderer_id_; 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Routing id for the render view, used to check tab specific cookie policy. 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int routing_id_; 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(MediaResourceGetterImpl); 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace content 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 86d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#endif // CONTENT_BROWSER_MEDIA_ANDROID_MEDIA_RESOURCE_GETTER_IMPL_H_ 87