File: browser_state_helper.cc

package info (click to toggle)
chromium-browser 41.0.2272.118-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie-kfreebsd
  • size: 2,189,132 kB
  • sloc: cpp: 9,691,462; ansic: 3,341,451; python: 712,689; asm: 518,779; xml: 208,926; java: 169,820; sh: 119,353; perl: 68,907; makefile: 28,311; yacc: 13,305; objc: 11,385; tcl: 3,186; cs: 2,225; sql: 2,217; lex: 2,215; lisp: 1,349; pascal: 1,256; awk: 407; ruby: 155; sed: 53; php: 14; exp: 11
file content (50 lines) | stat: -rw-r--r-- 2,108 bytes parent folder | download
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
// 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.

#include "components/keyed_service/ios/browser_state_helper.h"

#include "base/logging.h"
#include "base/supports_user_data.h"
#include "ios/web/public/browser_state.h"

// iOS code is still using BrowserContextKeyedServiceFactory and until the
// upstreaming is complete (http://crbug.com/419366) 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.
//
// If the base::SupportsUserData is a web::BrowserState then the public
// method web::BrowserState::FromSupportsUserData can do the conversion
// safely. If this method fails then context is content::BrowserContext
// and the methods defined below allow the embedder to provides helper
// to find the associated web::BrowserState (there is a 1:1 mapping).

namespace {
BrowserStateFromContextFn g_browser_state_from_context = nullptr;
}  // namespace

void SetBrowserStateFromContextHelper(BrowserStateFromContextFn helper) {
  g_browser_state_from_context = helper;
}

web::BrowserState* BrowserStateFromContext(base::SupportsUserData* context) {
  web::BrowserState* state = nullptr;
  if (context) {
    state = web::BrowserState::FromSupportsUserData(context);
    if (!state && g_browser_state_from_context)
      state = g_browser_state_from_context(context);
    DCHECK(state) << "cannot convert context to web::BrowserState";
  }
  return state;
}