Example #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()));
}
Example #2
0
ParsedURL::ParsedURL(const String& urlString, ParsedURLStringTag)
{
    unsigned urlStringLength = urlString.length();
    if (!urlStringLength)
        return; // FIXME: we should ASSERT on this, but people use KURL incorrectly with ParsedURLStringTag :(.

    RawURLBuffer<char> outputBuffer;
    String base;
    const CString& baseStr = base.utf8();
    bool isValid = false;
    URLSegments baseSegments;

    // FIXME: we should take shortcuts here! We do not have to resolve the relative part.
    if (urlString.is8Bit())
        isValid = URLUtilities::resolveRelative(baseStr.data(), baseSegments,
                                                reinterpret_cast<const char*>(urlString.characters8()), urlStringLength,
                                                /* charsetConverter */ 0,
                                                outputBuffer, &m_segments);
    else
        isValid = URLUtilities::resolveRelative(baseStr.data(), baseSegments,
                                                urlString.characters16(), urlStringLength,
                                                /* charsetConverter */ 0,
                                                outputBuffer, &m_segments);

    // FIXME: we should ASSERT on isValid, but people use KURL incorrectly with ParsedURLStringTag :(.
    if (isValid)
        m_spec = URLString(String(outputBuffer.data(), outputBuffer.length()));
}
Example #3
0
ParsedURL::ParsedURL(const String& urlString, URLQueryCharsetConverter* queryCharsetConverter)
{
    unsigned urlStringLength = urlString.length();
    if (!urlStringLength)
        return;

    RawURLBuffer<char> outputBuffer;
    String base;
    const CString& baseStr = base.utf8();
    bool isValid = false;
    URLSegments baseSegments;

    // FIXME: we should take shortcuts here! We do not have to resolve the relative part.
    if (urlString.is8Bit())
        isValid = URLUtilities::resolveRelative(baseStr.data(), baseSegments,
                                                reinterpret_cast<const char*>(urlString.characters8()), urlStringLength,
                                                queryCharsetConverter,
                                                outputBuffer, &m_segments);
    else
        isValid = URLUtilities::resolveRelative(baseStr.data(), baseSegments,
                                                urlString.characters16(), urlStringLength,
                                                queryCharsetConverter,
                                                outputBuffer, &m_segments);

    if (isValid)
        m_spec = URLString(String(outputBuffer.data(), outputBuffer.length()));
}
Example #4
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()));
}