1// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "content/public/browser/font_list_async.h"
6
7#include "base/bind.h"
8#include "base/values.h"
9#include "content/common/font_list.h"
10#include "content/public/browser/browser_thread.h"
11
12namespace content {
13
14namespace {
15
16// Just executes the given callback with the parameter.
17void ReturnFontListToOriginalThread(
18    const base::Callback<void(scoped_ptr<base::ListValue>)>& callback,
19    scoped_ptr<base::ListValue> result) {
20  callback.Run(result.Pass());
21}
22
23void GetFontListInBlockingPool(
24    BrowserThread::ID calling_thread_id,
25    const base::Callback<void(scoped_ptr<base::ListValue>)>& callback) {
26  scoped_ptr<base::ListValue> result(GetFontList_SlowBlocking());
27  BrowserThread::PostTask(calling_thread_id, FROM_HERE,
28      base::Bind(&ReturnFontListToOriginalThread, callback,
29                 base::Passed(&result)));
30}
31
32}  // namespace
33
34void GetFontListAsync(
35    const base::Callback<void(scoped_ptr<base::ListValue>)>& callback) {
36  BrowserThread::ID id;
37  bool well_known_thread = BrowserThread::GetCurrentThreadIdentifier(&id);
38  DCHECK(well_known_thread)
39      << "Can only call GetFontList from a well-known thread.";
40
41  BrowserThread::PostBlockingPoolSequencedTask(
42      kFontListSequenceToken,
43      FROM_HERE,
44      base::Bind(&GetFontListInBlockingPool, id, callback));
45}
46
47}  // namespace content
48