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