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#ifndef PPAPI_CPP_DEV_URL_UTIL_DEV_H_
6#define PPAPI_CPP_DEV_URL_UTIL_DEV_H_
7
8#include "ppapi/c/dev/ppb_url_util_dev.h"
9#include "ppapi/cpp/var.h"
10
11namespace pp {
12
13class InstanceHandle;
14
15// Simple wrapper around the PPB_URLUtil interface.
16class URLUtil_Dev {
17 public:
18  // This class is just a collection of random functions that aren't
19  // particularly attached to anything. This may return NULL if the
20  // browser doesn't support the URLUtil interface. Since this is a
21  // singleton, don't delete the pointer.
22  static const URLUtil_Dev* Get();
23
24  Var Canonicalize(const Var& url,
25                   PP_URLComponents_Dev* components = NULL) const;
26
27  Var ResolveRelativeToURL(const Var& base_url,
28                           const Var& relative_string,
29                           PP_URLComponents_Dev* components = NULL) const;
30  Var ResolveRelativeToDocument(const InstanceHandle& instance,
31                                const Var& relative_string,
32                                PP_URLComponents_Dev* components = NULL) const;
33
34  bool IsSameSecurityOrigin(const Var& url_a, const Var& url_b) const;
35  bool DocumentCanRequest(const InstanceHandle& instance, const Var& url) const;
36  bool DocumentCanAccessDocument(const InstanceHandle& active,
37                                 const InstanceHandle& target) const;
38  Var GetDocumentURL(const InstanceHandle& instance,
39                     PP_URLComponents_Dev* components = NULL) const;
40
41  Var GetPluginInstanceURL(const InstanceHandle& instance,
42                           PP_URLComponents_Dev* components = NULL) const;
43  Var GetPluginReferrerURL(const InstanceHandle& instance,
44                           PP_URLComponents_Dev* components = NULL) const;
45
46 private:
47  URLUtil_Dev() {}
48
49  // Copy and assignment are disallowed.
50  URLUtil_Dev(const URLUtil_Dev& other);
51  URLUtil_Dev& operator=(const URLUtil_Dev& other);
52};
53
54}  // namespace pp
55
56#endif  // PPAPI_CPP_DEV_URL_UTIL_DEV_H_
57