1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
// Copyright 2014 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 COMPONENTS_KEYED_SERVICE_IOS_BROWSER_STATE_CONTEXT_CONVERTER_H_
#define COMPONENTS_KEYED_SERVICE_IOS_BROWSER_STATE_CONTEXT_CONVERTER_H_
#include "base/macros.h"
namespace base {
class SupportsUserData;
}
// BrowserStateContextConverter does safe conversion of base::SupportsUserData*
// to web::BrowserState* or content::BrowserContext*.
//
// iOS code is still using BrowserContextKeyedServiceFactory and until the
// conversion is complete — http://crbug.com/478763 — there is need to have
// mixed dependency between BCKSF and BSKSF.
//
// The implementation has BrowserStateKeyedServiceFactory supporting a
// BrowserContextDependencyManager as DependencyManager. Thus the context
// parameter passed to the BrowserStateKeyedServiceFactory can either be
// content::BrowserContext if the method is invoked by DependencyManager
// or web::BrowserState if the method is invoked via the type-safe public
// API.
//
// The public API of BrowserStateKeyedServiceFactory is type-safe (all
// public method receive web::BrowserState for context object), so only
// methods that take a base::SupportsUserData need to discriminate
// between the two objects.
class BrowserStateContextConverter {
public:
// Sets/Gets the global BrowserStateContextConverter instance. May return null
// when mixed dependencies are disabled.
static void SetInstance(BrowserStateContextConverter* instance);
static BrowserStateContextConverter* GetInstance();
// Converts |context| to a web::BrowserState* and returns it casted as a
// base::SupportsUserData*.
virtual base::SupportsUserData* GetBrowserStateForContext(
base::SupportsUserData* context) = 0;
// Converts |context| to a content::BrowserContext* and returns it casted as a
// base::SupportsUserData*.
virtual base::SupportsUserData* GetBrowserContextForContext(
base::SupportsUserData* context) = 0;
protected:
BrowserStateContextConverter();
virtual ~BrowserStateContextConverter();
DISALLOW_COPY_AND_ASSIGN(BrowserStateContextConverter);
};
#endif // COMPONENTS_KEYED_SERVICE_IOS_BROWSER_STATE_CONTEXT_CONVERTER_H_
|