示例#1
0
ParsedURL::ParsedURL(const ParsedURL& base, const String& relative, URLQueryCharsetConverter* queryCharsetConverter)
{
    if (!base.isValid())
        return;

    unsigned relativeLength = relative.length();
    if (!relativeLength) {
        *this = base.withoutFragment();
        return;
    }

    RawURLBuffer<char> outputBuffer;
    const CString& baseStr = base.m_spec.m_string.utf8();
    bool isValid = false;

    if (relative.is8Bit())
        isValid = URLUtilities::resolveRelative(baseStr.data(), base.m_segments,
                                                reinterpret_cast<const char*>(relative.characters8()), relativeLength,
                                                queryCharsetConverter,
                                                outputBuffer, &m_segments);
    else
        isValid = URLUtilities::resolveRelative(baseStr.data(), base.m_segments,
                                                relative.characters16(), relativeLength,
                                                queryCharsetConverter,
                                                outputBuffer, &m_segments);

    if (isValid)
        m_spec = URLString(String(outputBuffer.data(), outputBuffer.length()));
}
示例#2
0
ParsedURL::ParsedURL(const ParsedURL& base, const String& relative)
{
    if (!base.isValid())
        return;

    if (relative.isEmpty()) {
        *this = base.withoutFragment();
        return;
    }

    // FIXME: handle invalid URLs.
    const String& baseString = base.m_spec.string();
    RawURLBuffer<char, 1024> outputBuffer;
    if (relative.is8Bit()) {
        if (baseString.is8Bit()) {
            URLParser<LChar, LChar>::parseURLWithBase(relative.characters8(), relative.length(),
                                                      baseString.characters8(), baseString.length(), base.m_segments,
                                                      outputBuffer, m_segments);
        } else {
            URLParser<LChar, UChar>::parseURLWithBase(relative.characters8(), relative.length(),
                                                      baseString.characters16(), baseString.length(), base.m_segments,
                                                      outputBuffer, m_segments);
        }
    } else {
        if (baseString.is8Bit()) {
            URLParser<UChar, LChar>::parseURLWithBase(relative.characters16(), relative.length(),
                                                      baseString.characters8(), baseString.length(), base.m_segments,
                                                      outputBuffer, m_segments);
        } else {
            URLParser<UChar, UChar>::parseURLWithBase(relative.characters16(), relative.length(),
                                                      baseString.characters16(), baseString.length(), base.m_segments,
                                                      outputBuffer, m_segments);
        }
    }
    m_spec = URLString(String(outputBuffer.data(), outputBuffer.length()));
}
示例#3
0
 void checkURL (String const& url)
 {
     ParsedURL result (url);
     expect (result.error () == 0);
     expect (result.url ().toString () == url);
 }