// Copyright (c) 2011 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 "content/public/browser/font_list_async.h"

#include "base/bind.h"
#include "base/values.h"
#include "content/common/font_list.h"
#include "content/public/browser/browser_thread.h"

namespace content {

namespace {

// Just executes the given callback with the parameter.
void ReturnFontListToOriginalThread(
    const base::Callback<void(scoped_ptr<base::ListValue>)>& callback,
    scoped_ptr<base::ListValue> result) {
  callback.Run(result.Pass());
}

void GetFontListInBlockingPool(
    BrowserThread::ID calling_thread_id,
    const base::Callback<void(scoped_ptr<base::ListValue>)>& callback) {
  scoped_ptr<base::ListValue> result(GetFontList_SlowBlocking());
  BrowserThread::PostTask(calling_thread_id, FROM_HERE,
      base::Bind(&ReturnFontListToOriginalThread, callback,
                 base::Passed(&result)));
}

}  // namespace

void GetFontListAsync(
    const base::Callback<void(scoped_ptr<base::ListValue>)>& callback) {
  BrowserThread::ID id;
  bool well_known_thread = BrowserThread::GetCurrentThreadIdentifier(&id);
  DCHECK(well_known_thread)
      << "Can only call GetFontList from a well-known thread.";

  BrowserThread::PostBlockingPoolSequencedTask(
      kFontListSequenceToken,
      FROM_HERE,
      base::Bind(&GetFontListInBlockingPool, id, callback));
}

}  // namespace content
