blob: cee9f47b0608872afd582f3cf0afaeda4d2e965c [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CONTENT_BROWSER_URL_LOADER_FACTORY_GETTER_H_
#define CONTENT_BROWSER_URL_LOADER_FACTORY_GETTER_H_
#include "base/macros.h"
#include "base/memory/ref_counted.h"
#include "content/common/content_export.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/common/url_loader_factory.mojom.h"
namespace content {
class StoragePartitionImpl;
// Holds on to URLLoaderFactory for a given StoragePartition and allows code
// running on the IO thread to access them. Note these are the factories used by
// the browser process for frame requests.
class URLLoaderFactoryGetter
: public base::RefCountedThreadSafe<URLLoaderFactoryGetter,
BrowserThread::DeleteOnIOThread> {
public:
CONTENT_EXPORT URLLoaderFactoryGetter();
// Initializes this object on the UI thread. The |partition| is used to
// initialize the URLLoaderFactories for the network service and AppCache.
void Initialize(StoragePartitionImpl* partition);
// Called on the IO thread to get the URLLoaderFactory to the network service.
// The pointer shouldn't be cached.
mojom::URLLoaderFactoryPtr* GetNetworkFactory();
// Called on the IO thread to get the URLLoaderFactory to the blob service.
// The pointer shouldn't be cached.
CONTENT_EXPORT mojom::URLLoaderFactoryPtr* GetBlobFactory();
// Overrides the network URLLoaderFactory for subsequent requests. Passing a
// null pointer will restore the default behavior.
// This is called on the UI thread.
CONTENT_EXPORT void SetNetworkFactoryForTesting(
mojom::URLLoaderFactoryPtr test_factory);
private:
friend class base::DeleteHelper<URLLoaderFactoryGetter>;
friend struct BrowserThread::DeleteOnThread<BrowserThread::IO>;
CONTENT_EXPORT ~URLLoaderFactoryGetter();
void InitializeOnIOThread(mojom::URLLoaderFactoryPtrInfo network_factory,
mojom::URLLoaderFactoryPtrInfo blob_factory);
void SetTestNetworkFactoryOnIOThread(
mojom::URLLoaderFactoryPtrInfo test_factory);
// Only accessed on IO thread.
mojom::URLLoaderFactoryPtr network_factory_;
mojom::URLLoaderFactoryPtr blob_factory_;
mojom::URLLoaderFactoryPtr test_factory_;
DISALLOW_COPY_AND_ASSIGN(URLLoaderFactoryGetter);
};
} // namespace content
#endif // CONTENT_BROWSER_URL_LOADER_FACTORY_GETTER_H_