< prev index next >

modules/web/src/main/native/Source/WebCore/platform/URL.cpp

Print this page




 407     if (isSchemeFirstChar(*p)) {
 408         ++p;
 409         while (isSchemeChar(*p)) {
 410             ++p;
 411         }
 412         if (*p == ':') {
 413             if (p[1] != '/' && equalIgnoringCase(base.protocol(), String(str, p - str)) && base.isHierarchical())
 414                 str = p + 1;
 415             else
 416                 absolute = true;
 417         }
 418     }
 419 
 420     CharBuffer parseBuffer;
 421 
 422     if (absolute) {
 423         parse(str, &relative);
 424     } else {
 425         // If the base is empty or opaque (e.g. data: or javascript:), then the URL is invalid
 426         // unless the relative URL is a single fragment.



 427         if (!base.isHierarchical()) {

 428             if (str[0] == '#') {
 429                 appendASCII(base.m_string.left(base.m_queryEnd), str, len, parseBuffer);
 430                 parse(parseBuffer.data(), &relative);
 431 #if PLATFORM(JAVA)
 432             } else if(base.isJarFile()) {
 433                 appendASCII(base.m_string.left(base.m_pathAfterLastSlash), str, len, parseBuffer);
 434                 parse(parseBuffer.data(), &relative);
 435 #endif
 436             } else {
 437                 m_string = relative;
 438                 invalidate();
 439             }
 440             return;
 441         }
 442 
 443         switch (str[0]) {
 444         case '\0':
 445             // The reference is empty, so this is a reference to the same document with any fragment identifier removed.
 446             *this = base;
 447             removeFragmentIdentifier();
 448             break;
 449         case '#': {
 450             // must be fragment-only reference
 451             appendASCII(base.m_string.left(base.m_queryEnd), str, len, parseBuffer);
 452             parse(parseBuffer.data(), &relative);
 453             break;
 454         }
 455         case '?': {




 407     if (isSchemeFirstChar(*p)) {
 408         ++p;
 409         while (isSchemeChar(*p)) {
 410             ++p;
 411         }
 412         if (*p == ':') {
 413             if (p[1] != '/' && equalIgnoringCase(base.protocol(), String(str, p - str)) && base.isHierarchical())
 414                 str = p + 1;
 415             else
 416                 absolute = true;
 417         }
 418     }
 419 
 420     CharBuffer parseBuffer;
 421 
 422     if (absolute) {
 423         parse(str, &relative);
 424     } else {
 425         // If the base is empty or opaque (e.g. data: or javascript:), then the URL is invalid
 426         // unless the relative URL is a single fragment.
 427 #if PLATFORM(JAVA)
 428         if (!base.isHierarchical() && !base.isJarFile()) {
 429 #else
 430         if (!base.isHierarchical()) {
 431 #endif
 432             if (str[0] == '#') {
 433                 appendASCII(base.m_string.left(base.m_queryEnd), str, len, parseBuffer);
 434                 parse(parseBuffer.data(), &relative);





 435             } else {
 436                 m_string = relative;
 437                 invalidate();
 438             }
 439             return;
 440         }
 441 
 442         switch (str[0]) {
 443         case '\0':
 444             // The reference is empty, so this is a reference to the same document with any fragment identifier removed.
 445             *this = base;
 446             removeFragmentIdentifier();
 447             break;
 448         case '#': {
 449             // must be fragment-only reference
 450             appendASCII(base.m_string.left(base.m_queryEnd), str, len, parseBuffer);
 451             parse(parseBuffer.data(), &relative);
 452             break;
 453         }
 454         case '?': {


< prev index next >