// 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 "ppapi/cpp/dev/url_util_dev.h" #include "ppapi/cpp/instance_handle.h" #include "ppapi/cpp/module_impl.h" namespace pp { namespace { template <> const char* interface_name<PPB_URLUtil_Dev_0_6>() { return PPB_URLUTIL_DEV_INTERFACE_0_6; } template <> const char* interface_name<PPB_URLUtil_Dev_0_7>() { return PPB_URLUTIL_DEV_INTERFACE_0_7; } } // namespace // static const URLUtil_Dev* URLUtil_Dev::Get() { static URLUtil_Dev util; static bool tried_to_init = false; static bool interface_available = false; if (!tried_to_init) { tried_to_init = true; if (has_interface<PPB_URLUtil_Dev_0_7>() || has_interface<PPB_URLUtil_Dev_0_6>()) interface_available = true; } if (!interface_available) return NULL; return &util; } Var URLUtil_Dev::Canonicalize(const Var& url, PP_URLComponents_Dev* components) const { if (has_interface<PPB_URLUtil_Dev_0_7>()) { return Var(PASS_REF, get_interface<PPB_URLUtil_Dev_0_7>()->Canonicalize(url.pp_var(), components)); } if (has_interface<PPB_URLUtil_Dev_0_6>()) { return Var(PASS_REF, get_interface<PPB_URLUtil_Dev_0_6>()->Canonicalize(url.pp_var(), components)); } return Var(); } Var URLUtil_Dev::ResolveRelativeToURL(const Var& base_url, const Var& relative_string, PP_URLComponents_Dev* components) const { if (has_interface<PPB_URLUtil_Dev_0_7>()) { return Var(PASS_REF, get_interface<PPB_URLUtil_Dev_0_7>()->ResolveRelativeToURL( base_url.pp_var(), relative_string.pp_var(), components)); } if (has_interface<PPB_URLUtil_Dev_0_6>()) { return Var(PASS_REF, get_interface<PPB_URLUtil_Dev_0_6>()->ResolveRelativeToURL( base_url.pp_var(), relative_string.pp_var(), components)); } return Var(); } Var URLUtil_Dev::ResolveRelativeToDocument( const InstanceHandle& instance, const Var& relative_string, PP_URLComponents_Dev* components) const { if (has_interface<PPB_URLUtil_Dev_0_7>()) { return Var(PASS_REF, get_interface<PPB_URLUtil_Dev_0_7>()->ResolveRelativeToDocument( instance.pp_instance(), relative_string.pp_var(), components)); } if (has_interface<PPB_URLUtil_Dev_0_6>()) { return Var(PASS_REF, get_interface<PPB_URLUtil_Dev_0_6>()->ResolveRelativeToDocument( instance.pp_instance(), relative_string.pp_var(), components)); } return Var(); } bool URLUtil_Dev::IsSameSecurityOrigin(const Var& url_a, const Var& url_b) const { if (has_interface<PPB_URLUtil_Dev_0_7>()) { return PP_ToBool( get_interface<PPB_URLUtil_Dev_0_7>()->IsSameSecurityOrigin( url_a.pp_var(), url_b.pp_var())); } if (has_interface<PPB_URLUtil_Dev_0_6>()) { return PP_ToBool( get_interface<PPB_URLUtil_Dev_0_6>()->IsSameSecurityOrigin( url_a.pp_var(), url_b.pp_var())); } return false; } bool URLUtil_Dev::DocumentCanRequest(const InstanceHandle& instance, const Var& url) const { if (has_interface<PPB_URLUtil_Dev_0_7>()) { return PP_ToBool( get_interface<PPB_URLUtil_Dev_0_7>()->DocumentCanRequest( instance.pp_instance(), url.pp_var())); } if (has_interface<PPB_URLUtil_Dev_0_6>()) { return PP_ToBool( get_interface<PPB_URLUtil_Dev_0_6>()->DocumentCanRequest( instance.pp_instance(), url.pp_var())); } return false; } bool URLUtil_Dev::DocumentCanAccessDocument( const InstanceHandle& active, const InstanceHandle& target) const { if (has_interface<PPB_URLUtil_Dev_0_7>()) { return PP_ToBool( get_interface<PPB_URLUtil_Dev_0_7>()->DocumentCanAccessDocument( active.pp_instance(), target.pp_instance())); } if (has_interface<PPB_URLUtil_Dev_0_6>()) { return PP_ToBool( get_interface<PPB_URLUtil_Dev_0_6>()->DocumentCanAccessDocument( active.pp_instance(), target.pp_instance())); } return false; } Var URLUtil_Dev::GetDocumentURL(const InstanceHandle& instance, PP_URLComponents_Dev* components) const { if (has_interface<PPB_URLUtil_Dev_0_7>()) { return Var(PASS_REF, get_interface<PPB_URLUtil_Dev_0_7>()->GetDocumentURL( instance.pp_instance(), components)); } if (has_interface<PPB_URLUtil_Dev_0_6>()) { return Var(PASS_REF, get_interface<PPB_URLUtil_Dev_0_6>()->GetDocumentURL( instance.pp_instance(), components)); } return Var(); } Var URLUtil_Dev::GetPluginInstanceURL(const InstanceHandle& instance, PP_URLComponents_Dev* components) const { if (has_interface<PPB_URLUtil_Dev_0_7>()) { return Var(PASS_REF, get_interface<PPB_URLUtil_Dev_0_7>()->GetPluginInstanceURL( instance.pp_instance(), components)); } if (has_interface<PPB_URLUtil_Dev_0_6>()) { return Var(PASS_REF, get_interface<PPB_URLUtil_Dev_0_6>()->GetPluginInstanceURL( instance.pp_instance(), components)); } return Var(); } Var URLUtil_Dev::GetPluginReferrerURL(const InstanceHandle& instance, PP_URLComponents_Dev* components) const { if (has_interface<PPB_URLUtil_Dev_0_7>()) { return Var(PASS_REF, get_interface<PPB_URLUtil_Dev_0_7>()->GetPluginReferrerURL( instance.pp_instance(), components)); } return Var(); } } // namespace pp