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