1dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch/* 2dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * Copyright (C) 2010 Apple Inc. All rights reserved. 3a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch * Copyright (C) 2010 University of Szeged. All rights reserved. 4dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * 5dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * Redistribution and use in source and binary forms, with or without 6dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * modification, are permitted provided that the following conditions 7dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * are met: 8dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * 1. Redistributions of source code must retain the above copyright 9dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * notice, this list of conditions and the following disclaimer. 10dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * 2. Redistributions in binary form must reproduce the above copyright 11dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * notice, this list of conditions and the following disclaimer in the 12dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * documentation and/or other materials provided with the distribution. 13dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * 14dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' 15dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 16dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 17dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS 18dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 19dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 20dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 21dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 22dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 23dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 24dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * THE POSSIBILITY OF SUCH DAMAGE. 25dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch */ 26dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 27dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch#ifndef StringFunctions_h 28dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch#define StringFunctions_h 29dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 30dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch#include <JavaScriptCore/JSRetainPtr.h> 31a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#include <JavaScriptCore/JavaScript.h> 32a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#include <sstream> 33a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#include <string> 34dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch#include <WebKit2/WKRetainPtr.h> 35dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch#include <WebKit2/WKString.h> 36a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#include <WebKit2/WKStringPrivate.h> 37dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch#include <WebKit2/WKURL.h> 38a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#include <wtf/OwnArrayPtr.h> 39a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#include <wtf/PassOwnArrayPtr.h> 40dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch#include <wtf/Platform.h> 41dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch#include <wtf/Vector.h> 42dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 43dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdochnamespace WTR { 44dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 45dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch// Conversion functions 46dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 47dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdochinline WKRetainPtr<WKStringRef> toWK(JSStringRef string) 48dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch{ 492bde8e466a4451c7319e3a072d118917957d6554Steve Block return adoptWK(WKStringCreateWithJSString(string)); 50dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch} 51dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 52dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdochinline WKRetainPtr<WKStringRef> toWK(JSRetainPtr<JSStringRef> string) 53dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch{ 54a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return toWK(string.get()); 55dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch} 56dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 57dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdochinline JSRetainPtr<JSStringRef> toJS(WKStringRef string) 58dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch{ 59a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return JSRetainPtr<JSStringRef>(Adopt, WKStringCopyJSString(string)); 60dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch} 61dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 62dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdochinline JSRetainPtr<JSStringRef> toJS(const WKRetainPtr<WKStringRef>& string) 63dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch{ 64dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch return toJS(string.get()); 65dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch} 66dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 67a94275402997c11dd2e778633dacf4b7e630a35dBen Murdochinline std::string toSTD(WKStringRef string) 68dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch{ 69a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch size_t bufferSize = WKStringGetMaximumUTF8CStringSize(string); 70a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch OwnArrayPtr<char> buffer = adoptArrayPtr(new char[bufferSize]); 71a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch size_t stringLength = WKStringGetUTF8CString(string, buffer.get(), bufferSize); 72a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return std::string(buffer.get(), stringLength - 1); 73dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch} 74dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 75a94275402997c11dd2e778633dacf4b7e630a35dBen Murdochinline std::string toSTD(const WKRetainPtr<WKStringRef>& string) 76dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch{ 77a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return toSTD(string.get()); 78dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch} 79dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 80a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch// Streaming functions 81a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 82dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdochinline std::ostream& operator<<(std::ostream& out, WKStringRef stringRef) 83dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch{ 84dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch if (!stringRef) 85dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch return out; 86a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 87a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return out << toSTD(stringRef); 88dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch} 89dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 90dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdochinline std::ostream& operator<<(std::ostream& out, const WKRetainPtr<WKStringRef>& stringRef) 91dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch{ 92dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch return out << stringRef.get(); 93dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch} 94dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 952bde8e466a4451c7319e3a072d118917957d6554Steve Blockinline std::ostream& operator<<(std::ostream& out, WKURLRef urlRef) 962bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 972bde8e466a4451c7319e3a072d118917957d6554Steve Block if (!urlRef) 982bde8e466a4451c7319e3a072d118917957d6554Steve Block return out; 992bde8e466a4451c7319e3a072d118917957d6554Steve Block 1002bde8e466a4451c7319e3a072d118917957d6554Steve Block return out << toSTD(adoptWK(WKURLCopyString(urlRef))); 1012bde8e466a4451c7319e3a072d118917957d6554Steve Block} 1022bde8e466a4451c7319e3a072d118917957d6554Steve Block 1032bde8e466a4451c7319e3a072d118917957d6554Steve Blockinline std::ostream& operator<<(std::ostream& out, const WKRetainPtr<WKURLRef>& urlRef) 1042bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 1052bde8e466a4451c7319e3a072d118917957d6554Steve Block return out << urlRef.get(); 1062bde8e466a4451c7319e3a072d118917957d6554Steve Block} 1072bde8e466a4451c7319e3a072d118917957d6554Steve Block 108dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch} // namespace WTR 109dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 110dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch#endif // StringFunctions_h 111