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 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207
|
/* Copyright 2012 The Chromium Authors
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
/* From dev/ppb_url_util_dev.idl modified Wed Aug 28 19:09:17 2013. */
#ifndef PPAPI_C_DEV_PPB_URL_UTIL_DEV_H_
#define PPAPI_C_DEV_PPB_URL_UTIL_DEV_H_
#include "ppapi/c/pp_bool.h"
#include "ppapi/c/pp_instance.h"
#include "ppapi/c/pp_macros.h"
#include "ppapi/c/pp_stdint.h"
#include "ppapi/c/pp_var.h"
#define PPB_URLUTIL_DEV_INTERFACE_0_6 "PPB_URLUtil(Dev);0.6"
#define PPB_URLUTIL_DEV_INTERFACE_0_7 "PPB_URLUtil(Dev);0.7"
#define PPB_URLUTIL_DEV_INTERFACE PPB_URLUTIL_DEV_INTERFACE_0_7
/**
* @file
* This file defines the <code>PPB_URLUtil_Dev</code> interface.
*/
/**
* @addtogroup Structs
* @{
*/
/*
* A component specifies the range of the part of the URL. The begin specifies
* the index into the string of the first character of that component. The len
* specifies the length of that component.
*
* This range does not include any special delimiter for that component, so
* the scheme doesn't include the trailing colon, the username and password
* don't include the @ and :, the port doesn't include the colon, the query
* doesn't include the ?, and the ref doesn't include the #.
*
* The exception is that the path *does* include the first /, since that's an
* integral part of the path.
*
* If the component is not present at all, begin will be 0 and len will be -1.
* If the component is present but empty, the length will be 0 instead. Example:
* http://foo/search -> query = (0, -1)
* http://foo/search? -> query = (18, 0)
*/
struct PP_URLComponent_Dev {
int32_t begin;
int32_t len;
};
PP_COMPILE_ASSERT_STRUCT_SIZE_IN_BYTES(PP_URLComponent_Dev, 8);
struct PP_URLComponents_Dev {
struct PP_URLComponent_Dev scheme;
struct PP_URLComponent_Dev username;
struct PP_URLComponent_Dev password;
struct PP_URLComponent_Dev host;
struct PP_URLComponent_Dev port;
struct PP_URLComponent_Dev path;
struct PP_URLComponent_Dev query;
struct PP_URLComponent_Dev ref;
};
PP_COMPILE_ASSERT_STRUCT_SIZE_IN_BYTES(PP_URLComponents_Dev, 64);
/**
* @}
*/
/**
* @addtogroup Interfaces
* @{
*/
/*
* URL encoding: URLs are supplied to this interface as NULL-terminated 8-bit
* strings. You can pass non-ASCII characters which will be interpreted as
* UTF-8. Canonicalized URL strings returned by these functions will be ASCII
* except for the reference fragment (stuff after the '#') which will be
* encoded as UTF-8.
*/
struct PPB_URLUtil_Dev_0_7 {
/*
* Canonicalizes the given URL string according to the rules of the host
* browser. If the URL is invalid or the var is not a string, this will
* return a Null var and the components structure will be unchanged.
*
* The components pointer, if non-NULL and the canonicalized URL is valid,
* will identify the components of the resulting URL. Components may be NULL
* to specify that no component information is necessary.
*/
struct PP_Var (*Canonicalize)(struct PP_Var url,
struct PP_URLComponents_Dev* components);
/*
* Resolves the given URL relative to the given base URL. The resulting URL
* is returned as a string. If the resolution is invalid or either of the
* inputs are not strings, a Null var will be returned. The resulting URL
* will also be canonicalized according to the rules of the browser.
*
* Note that the "relative" URL may in fact be absolute, in which case it
* will be returned. This function is identical to resolving the full URL
* for an <a href="..."> on a web page. Attempting to resolve a relative URL
* on a base URL that doesn't support this (e.g. "data") will fail and will
* return a Null var, unless the relative URL is itself absolute.
*
* The components pointer, if non-NULL and the canonicalized URL is valid,
* will identify the components of the resulting URL. Components may be NULL
* to specify that no component information is necessary.
*/
struct PP_Var (*ResolveRelativeToURL)(
struct PP_Var base_url,
struct PP_Var relative_string,
struct PP_URLComponents_Dev* components);
/*
* Identical to ResolveRelativeToURL except that the base URL is the base
* URL of the document containing the given plugin instance.
*
* Danger: This will be identical to resolving a relative URL on the page,
* and might be overridden by the page to something different than its actual
* URL via the <base> tag. Therefore, resolving a relative URL of "" won't
* necessarily give you the URL of the page!
*/
struct PP_Var (*ResolveRelativeToDocument)(
PP_Instance instance,
struct PP_Var relative_string,
struct PP_URLComponents_Dev* components);
/*
* Checks whether the given two URLs are in the same security origin. Returns
* FALSE if either of the URLs are invalid.
*/
PP_Bool (*IsSameSecurityOrigin)(struct PP_Var url_a, struct PP_Var url_b);
/*
* Checks whether the document hosting the given plugin instance can access
* the given URL according to the same origin policy of the browser. Returns
* PP_FALSE if the instance or the URL is invalid.
*/
PP_Bool (*DocumentCanRequest)(PP_Instance instance, struct PP_Var url);
/*
* Checks whether the document containing the |active| plugin instance can
* access the document containing the |target| plugin instance according to
* the security policy of the browser. This includes the same origin policy
* and any cross-origin capabilities enabled by the document. If either of
* the plugin instances are invalid, returns PP_FALSE.
*/
PP_Bool (*DocumentCanAccessDocument)(PP_Instance active, PP_Instance target);
/*
* Returns the URL for the document. This is a safe way to retrieve
* window.location.href.
* The components pointer, if non-NULL and the canonicalized URL is valid,
* will identify the components of the resulting URL. Components may be NULL
* to specify that no component information is necessary.
*/
struct PP_Var (*GetDocumentURL)(PP_Instance instance,
struct PP_URLComponents_Dev* components);
/*
* Returns the Source URL for the plugin. This returns the URL that would be
* streamed to the plugin if it were a NPAPI plugin. This is usually the src
* attribute on the <embed> element, but the rules are obscure and different
* based on whether the plugin is loaded from an <embed> element or an
* <object> element.
* The components pointer, if non-NULL and the canonicalized URL is valid,
* will identify the components of the resulting URL. Components may be NULL
* to specify that no component information is necessary.
*/
struct PP_Var (*GetPluginInstanceURL)(
PP_Instance instance,
struct PP_URLComponents_Dev* components);
/*
* Returns the Referrer URL of the HTTP request that loaded the plugin. This
* is the value of the 'Referer' header of the request. An undefined value
* means the 'Referer' header was absent.
* The components pointer, if non-NULL and the canonicalized URL is valid,
* will identify the components of the resulting URL. Components may be NULL
* to specify that no component information is necessary.
*/
struct PP_Var (*GetPluginReferrerURL)(
PP_Instance instance,
struct PP_URLComponents_Dev* components);
};
typedef struct PPB_URLUtil_Dev_0_7 PPB_URLUtil_Dev;
struct PPB_URLUtil_Dev_0_6 {
struct PP_Var (*Canonicalize)(struct PP_Var url,
struct PP_URLComponents_Dev* components);
struct PP_Var (*ResolveRelativeToURL)(
struct PP_Var base_url,
struct PP_Var relative_string,
struct PP_URLComponents_Dev* components);
struct PP_Var (*ResolveRelativeToDocument)(
PP_Instance instance,
struct PP_Var relative_string,
struct PP_URLComponents_Dev* components);
PP_Bool (*IsSameSecurityOrigin)(struct PP_Var url_a, struct PP_Var url_b);
PP_Bool (*DocumentCanRequest)(PP_Instance instance, struct PP_Var url);
PP_Bool (*DocumentCanAccessDocument)(PP_Instance active, PP_Instance target);
struct PP_Var (*GetDocumentURL)(PP_Instance instance,
struct PP_URLComponents_Dev* components);
struct PP_Var (*GetPluginInstanceURL)(
PP_Instance instance,
struct PP_URLComponents_Dev* components);
};
/**
* @}
*/
#endif /* PPAPI_C_DEV_PPB_URL_UTIL_DEV_H_ */
|