1// Copyright 2013 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#ifndef CHROME_BROWSER_EXTENSIONS_API_MESSAGING_MESSAGE_PROPERTY_PROVIDER_H_
6#define CHROME_BROWSER_EXTENSIONS_API_MESSAGING_MESSAGE_PROPERTY_PROVIDER_H_
7
8#include <string>
9
10#include "base/callback.h"
11
12class GURL;
13class Profile;
14
15namespace base {
16class TaskRunner;
17}
18
19namespace net {
20class URLRequestContextGetter;
21}
22
23namespace extensions {
24
25// This class provides properties of messages asynchronously.
26class MessagePropertyProvider {
27 public:
28  MessagePropertyProvider();
29
30  typedef base::Callback<void(const std::string&)> ChannelIDCallback;
31
32  // Gets the DER-encoded public key of the domain-bound cert,
33  // aka TLS channel ID, for the given URL.
34  // Runs |reply| on the current message loop.
35  void GetChannelID(Profile* profile,
36                    const GURL& source_url,
37                    const ChannelIDCallback& reply);
38
39 private:
40  struct GetChannelIDOutput;
41
42  static void GetChannelIDOnIOThread(
43      scoped_refptr<base::TaskRunner> original_task_runner,
44      scoped_refptr<net::URLRequestContextGetter> request_context_getter,
45      const std::string& host,
46      const ChannelIDCallback& reply);
47
48  static void GotChannelID(
49      scoped_refptr<base::TaskRunner> original_task_runner,
50      struct GetChannelIDOutput* output,
51      const ChannelIDCallback& reply,
52      int status);
53
54  DISALLOW_COPY_AND_ASSIGN(MessagePropertyProvider);
55};
56
57}  // namespace extensions
58
59#endif  // CHROME_BROWSER_EXTENSIONS_API_MESSAGING_MESSAGE_PROPERTY_PROVIDER_H_
60