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