| Index: chrome/browser/renderer_host/pepper/pepper_flash_browser_host.cc
|
| diff --git a/chrome/browser/renderer_host/pepper/pepper_flash_browser_host.cc b/chrome/browser/renderer_host/pepper/pepper_flash_browser_host.cc
|
| index f8e601db41e245801c327d7f2956776b798dd7a0..5dabe475d6fbd93ba9022542c52af786c93a643f 100644
|
| --- a/chrome/browser/renderer_host/pepper/pepper_flash_browser_host.cc
|
| +++ b/chrome/browser/renderer_host/pepper/pepper_flash_browser_host.cc
|
| @@ -5,12 +5,12 @@
|
| #include "chrome/browser/renderer_host/pepper/pepper_flash_browser_host.h"
|
|
|
| #include "base/time.h"
|
| +#include "chrome/browser/content_settings/cookie_settings.h"
|
| +#include "chrome/browser/profiles/profile.h"
|
| #include "content/public/browser/browser_context.h"
|
| #include "content/public/browser/browser_ppapi_host.h"
|
| #include "content/public/browser/browser_thread.h"
|
| -#include "content/public/browser/content_browser_client.h"
|
| #include "content/public/browser/render_process_host.h"
|
| -#include "content/public/browser/resource_context.h"
|
| #include "googleurl/src/gurl.h"
|
| #include "ipc/ipc_message_macros.h"
|
| #include "ppapi/c/pp_errors.h"
|
| @@ -29,19 +29,21 @@
|
| using content::BrowserPpapiHost;
|
| using content::BrowserThread;
|
| using content::RenderProcessHost;
|
| -using content::ResourceContext;
|
|
|
| namespace chrome {
|
|
|
| namespace {
|
|
|
| -// Get the ResourceContext on the UI thread for the given render process ID.
|
| -ResourceContext* GetResourceContext(int render_process_id) {
|
| +// Get the CookieSettings on the UI thread for the given render process ID.
|
| +scoped_refptr<CookieSettings> GetCookieSettings(int render_process_id) {
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| RenderProcessHost* render_process_host = RenderProcessHost::FromID(
|
| render_process_id);
|
| - if (render_process_host && render_process_host->GetBrowserContext())
|
| - return render_process_host->GetBrowserContext()->GetResourceContext();
|
| + if (render_process_host && render_process_host->GetBrowserContext()) {
|
| + Profile* profile =
|
| + Profile::FromBrowserContext(render_process_host->GetBrowserContext());
|
| + return CookieSettings::Factory::GetForProfile(profile);
|
| + }
|
| return NULL;
|
| }
|
|
|
| @@ -53,7 +55,6 @@ PepperFlashBrowserHost::PepperFlashBrowserHost(
|
| PP_Resource resource)
|
| : ResourceHost(host->GetPpapiHost(), instance, resource),
|
| host_(host),
|
| - resource_context_(NULL),
|
| weak_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) {
|
| int unused;
|
| host->GetRenderViewIDsForInstance(instance, &render_process_id_, &unused);
|
| @@ -108,19 +109,18 @@ int32_t PepperFlashBrowserHost::OnMsgGetLocalTimeZoneOffset(
|
|
|
| int32_t PepperFlashBrowserHost::OnMsgGetLocalDataRestrictions(
|
| ppapi::host::HostMessageContext* context) {
|
| - // Getting the LocalDataRestrictions needs to be done on the IO thread,
|
| - // however it relies on the ResourceContext which can only be accessed from
|
| - // the UI thread. We lazily initialize |resource_context_| by grabbing the
|
| - // pointer from the UI thread and then call |GetLocalDataRestrictions| with
|
| - // it.
|
| + // Getting the Flash LSO settings requires using the CookieSettings which
|
| + // belong to the profile which lives on the UI thread. We lazily initialize
|
| + // |cookie_settings_| by grabbing the reference from the UI thread and then
|
| + // call |GetLocalDataRestrictions| with it.
|
| GURL document_url = host_->GetDocumentURLForInstance(pp_instance());
|
| GURL plugin_url = host_->GetPluginURLForInstance(pp_instance());
|
| - if (resource_context_) {
|
| + if (cookie_settings_.get()) {
|
| GetLocalDataRestrictions(context->MakeReplyMessageContext(), document_url,
|
| - plugin_url, resource_context_);
|
| + plugin_url, cookie_settings_);
|
| } else {
|
| BrowserThread::PostTaskAndReplyWithResult(BrowserThread::UI, FROM_HERE,
|
| - base::Bind(&GetResourceContext, render_process_id_),
|
| + base::Bind(&GetCookieSettings, render_process_id_),
|
| base::Bind(&PepperFlashBrowserHost::GetLocalDataRestrictions,
|
| weak_factory_.GetWeakPtr(),
|
| context->MakeReplyMessageContext(),
|
| @@ -133,24 +133,25 @@ void PepperFlashBrowserHost::GetLocalDataRestrictions(
|
| ppapi::host::ReplyMessageContext reply_context,
|
| const GURL& document_url,
|
| const GURL& plugin_url,
|
| - ResourceContext* resource_context) {
|
| + scoped_refptr<CookieSettings> cookie_settings) {
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
|
| - // Note that the resource context lives on the IO thread and is owned by the
|
| - // browser profile so its lifetime should outlast ours.
|
| - if (!resource_context_)
|
| - resource_context_ = resource_context;
|
| +
|
| + // Lazily initialize |cookie_settings_|. The cookie settings are thread-safe
|
| + // ref-counted so as long as we hold a reference to them we can safely access
|
| + // them on the IO thread.
|
| + if (!cookie_settings_.get()) {
|
| + cookie_settings_ = cookie_settings;
|
| + } else {
|
| + DCHECK(cookie_settings_.get() == cookie_settings.get());
|
| + }
|
|
|
| PP_FlashLSORestrictions restrictions = PP_FLASHLSORESTRICTIONS_NONE;
|
| - if (resource_context_ && document_url.is_valid() && plugin_url.is_valid()) {
|
| - content::ContentBrowserClient* client =
|
| - content::GetContentClient()->browser();
|
| - if (!client->AllowPluginLocalDataAccess(document_url, plugin_url,
|
| - resource_context_)) {
|
| + if (cookie_settings_.get() && document_url.is_valid() &&
|
| + plugin_url.is_valid()) {
|
| + if (!cookie_settings_->IsReadingCookieAllowed(document_url, plugin_url))
|
| restrictions = PP_FLASHLSORESTRICTIONS_BLOCK;
|
| - } else if (client->AllowPluginLocalDataSessionOnly(plugin_url,
|
| - resource_context_)) {
|
| + else if (cookie_settings_->IsCookieSessionOnly(plugin_url))
|
| restrictions = PP_FLASHLSORESTRICTIONS_IN_MEMORY;
|
| - }
|
| }
|
| SendReply(reply_context, PpapiPluginMsg_Flash_GetLocalDataRestrictionsReply(
|
| static_cast<int32_t>(restrictions)));
|
|
|