Changeset 40380

Show
Ignore:
Timestamp:
01/29/09 15:48:04 (19 months ago)
Author:
weinig@apple.com
Message:

WebCore:

2009-01-29 Sam Weinig < sam@webkit.org>

Reviewed by Mark Rowe.

First step in tracking the urls a HistoryItem was redirected through.

  • WebCore.base.exp:
  • history/HistoryItem.cpp: (WebCore::HistoryItem::HistoryItem): (WebCore::HistoryItem::addRedirectURL): (WebCore::HistoryItem::redirectURLs): (WebCore::HistoryItem::setRedirectURLs):
  • history/HistoryItem.h:

WebKit/mac:

2009-01-29 Sam Weinig < sam@webkit.org>

Reviewed by Mark Rowe.

First step in tracking the urls a HistoryItem was redirected through.

  • History/WebHistoryItem.mm: (-[WebHistoryItem initFromDictionaryRepresentation:]): (-[WebHistoryItem dictionaryRepresentation]):
  • Misc/WebNSDictionaryExtras.h:
  • Misc/WebNSDictionaryExtras.m: (-[NSDictionary _webkit_arrayForKey:]): Add helper.

WebKit/win:

2009-01-29 Sam Weinig < sam@webkit.org>

Reviewed by Mark Rowe.

First step in tracking the urls a HistoryItem was redirected through.

  • WebHistoryItem.cpp: (WebHistoryItem::initFromDictionaryRepresentation): (WebHistoryItem::dictionaryRepresentation):
Location:
trunk
Files:
10 modified

Legend:

Unmodified
Added
Removed
  • trunk/WebCore/ChangeLog

    r40379 r40380  
     12009-01-29  Sam Weinig  <sam@webkit.org> 
     2 
     3        Reviewed by Mark Rowe. 
     4 
     5        First step in tracking the urls a HistoryItem was redirected through. 
     6 
     7        * WebCore.base.exp: 
     8        * history/HistoryItem.cpp: 
     9        (WebCore::HistoryItem::HistoryItem): 
     10        (WebCore::HistoryItem::addRedirectURL): 
     11        (WebCore::HistoryItem::redirectURLs): 
     12        (WebCore::HistoryItem::setRedirectURLs): 
     13        * history/HistoryItem.h: 
     14 
    1152009-01-29  Dirk Schulze  <krit@webkit.org> 
    216 
  • trunk/WebCore/WebCore.base.exp

    r40353 r40380  
    181181__ZN7WebCore11HistoryItem14setScrollPointERKNS_8IntPointE 
    182182__ZN7WebCore11HistoryItem15setIsTargetItemEb 
     183__ZN7WebCore11HistoryItem15setRedirectURLsESt8auto_ptrIN3WTF6VectorINS_6StringELm0EEEE 
    183184__ZN7WebCore11HistoryItem17setAlternateTitleERKNS_6StringE 
    184185__ZN7WebCore11HistoryItem18setLastVisitedTimeEd 
     
    717718__ZNK7WebCore11HistoryItem11scrollPointEv 
    718719__ZNK7WebCore11HistoryItem12isTargetItemEv 
     720__ZNK7WebCore11HistoryItem12redirectURLsEv 
    719721__ZNK7WebCore11HistoryItem14alternateTitleEv 
    720722__ZNK7WebCore11HistoryItem15lastVisitedTimeEv 
  • trunk/WebCore/history/HistoryItem.cpp

    r40286 r40380  
    129129    for (unsigned i = 0; i < size; ++i) 
    130130        m_subItems.append(item.m_subItems[i]->copy()); 
     131 
     132    if (item.m_redirectURLs) 
     133        m_redirectURLs.set(new Vector<String>(*item.m_redirectURLs)); 
    131134} 
    132135 
     
    401404} 
    402405 
     406void HistoryItem::addRedirectURL(const String& url) 
     407{ 
     408    if (!m_redirectURLs) 
     409        m_redirectURLs.set(new Vector<String>); 
     410 
     411    m_redirectURLs->append(url); 
     412} 
     413 
     414Vector<String>* HistoryItem::redirectURLs() const 
     415{ 
     416    return m_redirectURLs.get(); 
     417} 
     418 
     419void HistoryItem::setRedirectURLs(std::auto_ptr<Vector<String> > redirectURLs) 
     420{ 
     421    m_redirectURLs.adopt(redirectURLs); 
     422} 
     423 
    403424#ifndef NDEBUG 
    404425 
  • trunk/WebCore/history/HistoryItem.h

    r40132 r40380  
    139139    void setLastVisitedTime(double); 
    140140    void visited(const String& title, double time); 
    141      
     141 
     142    void addRedirectURL(const String&); 
     143    Vector<String>* redirectURLs() const; 
     144    void setRedirectURLs(std::auto_ptr<Vector<String> >); 
     145 
    142146    bool isCurrentDocument(Document*) const; 
    143147     
     
    190194    bool m_isTargetItem; 
    191195    int m_visitCount; 
    192      
     196 
     197    OwnPtr<Vector<String> > m_redirectURLs; 
     198 
    193199    // info used to repost form data 
    194200    RefPtr<FormData> m_formData; 
  • trunk/WebKit/mac/ChangeLog

    r40377 r40380  
     12009-01-29  Sam Weinig  <sam@webkit.org> 
     2 
     3        Reviewed by Mark Rowe. 
     4 
     5        First step in tracking the urls a HistoryItem was redirected through. 
     6 
     7        * History/WebHistoryItem.mm: 
     8        (-[WebHistoryItem initFromDictionaryRepresentation:]): 
     9        (-[WebHistoryItem dictionaryRepresentation]): 
     10        * Misc/WebNSDictionaryExtras.h: 
     11        * Misc/WebNSDictionaryExtras.m: 
     12        (-[NSDictionary _webkit_arrayForKey:]): Add helper. 
     13 
    1142009-01-29  Anders Carlsson  <andersca@apple.com> 
    215 
  • trunk/WebKit/mac/History/WebHistoryItem.mm

    r40363 r40380  
    6363static NSString *lastVisitWasFailureKey = @"lastVisitWasFailure"; 
    6464static NSString *lastVisitWasHTTPNonGetKey = @"lastVisitWasHTTPNonGet"; 
     65static NSString *redirectURLsKey = @"redirectURLs"; 
    6566 
    6667// Notification strings. 
     
    365366        core(_private)->setLastVisitWasHTTPNonGet(lastVisitWasHTTPNonGet); 
    366367 
     368    if (NSArray *redirectURLs = [dict _webkit_arrayForKey:redirectURLsKey]) { 
     369        NSUInteger size = [redirectURLs count]; 
     370        std::auto_ptr<Vector<String> > redirectURLsVector(new Vector<String>(size)); 
     371        for (NSUInteger i = 0; i < size; ++i) 
     372            (*redirectURLsVector)[i] = String([redirectURLs objectAtIndex:i]); 
     373        core(_private)->setRedirectURLs(redirectURLsVector); 
     374    } 
     375 
    367376    NSArray *childDicts = [dict objectForKey:childrenKey]; 
    368377    if (childDicts) { 
     
    409418    HistoryItem* coreItem = core(_private); 
    410419     
    411     if (!coreItem->urlString().isEmpty()) { 
     420    if (!coreItem->urlString().isEmpty()) 
    412421        [dict setObject:(NSString*)coreItem->urlString() forKey:@""]; 
    413     } 
    414     if (!coreItem->title().isEmpty()) { 
     422    if (!coreItem->title().isEmpty()) 
    415423        [dict setObject:(NSString*)coreItem->title() forKey:titleKey]; 
    416     } 
    417     if (!coreItem->alternateTitle().isEmpty()) { 
     424    if (!coreItem->alternateTitle().isEmpty()) 
    418425        [dict setObject:(NSString*)coreItem->alternateTitle() forKey:displayTitleKey]; 
    419     } 
    420426    if (coreItem->lastVisitedTime() != 0.0) { 
    421         // store as a string to maintain backward compatibility (see 3245793) 
     427        // Store as a string to maintain backward compatibility. (See 3245793) 
    422428        [dict setObject:[NSString stringWithFormat:@"%.1lf", coreItem->lastVisitedTime()] 
    423429                 forKey:lastVisitedTimeIntervalKey]; 
     
    427433    if (coreItem->lastVisitWasFailure()) 
    428434        [dict setObject:[NSNumber numberWithBool:YES] forKey:lastVisitWasFailureKey]; 
    429  
    430435    if (coreItem->lastVisitWasHTTPNonGet()) { 
    431436        ASSERT(coreItem->urlString().startsWith("http:", false) || coreItem->urlString().startsWith("https:", false)); 
    432437        [dict setObject:[NSNumber numberWithBool:YES] forKey:lastVisitWasHTTPNonGetKey]; 
     438    } 
     439    if (Vector<String>* redirectURLs = coreItem->redirectURLs()) { 
     440        size_t size = redirectURLs->size(); 
     441        NSMutableArray *result = [[NSMutableArray alloc] initWithCapacity:size]; 
     442        for (size_t i = 0; i < size; ++i) 
     443            [result addObject:(NSString*)redirectURLs->at(i)]; 
     444        [dict setObject:result forKey:redirectURLsKey]; 
     445        [result release]; 
    433446    } 
    434447     
  • trunk/WebKit/mac/Misc/WebNSDictionaryExtras.h

    r38449 r40380  
    3333- (int)_webkit_intForKey:(id)key; 
    3434- (NSString *)_webkit_stringForKey:(id)key; // Returns nil if the value is not an NSString. 
     35- (NSArray *)_webkit_arrayForKey:(id)key; // Returns nil if the value is not an NSArray. 
    3536 
    3637// Searches for the full MIME type, then the prefix (e.g., "text/" for "text/html") 
  • trunk/WebKit/mac/Misc/WebNSDictionaryExtras.m

    r38449 r40380  
    4848    id object = [self objectForKey:key]; 
    4949    return [object isKindOfClass:[NSString class]] ? object : nil; 
     50} 
     51 
     52-(NSArray *)_webkit_arrayForKey:(id)key 
     53{ 
     54    id object = [self objectForKey:key]; 
     55    return [object isKindOfClass:[NSArray class]] ? object : nil; 
    5056} 
    5157 
  • trunk/WebKit/win/ChangeLog

    r40366 r40380  
     12009-01-29  Sam Weinig  <sam@webkit.org> 
     2 
     3        Reviewed by Mark Rowe. 
     4 
     5        First step in tracking the urls a HistoryItem was redirected through. 
     6 
     7        * WebHistoryItem.cpp: 
     8        (WebHistoryItem::initFromDictionaryRepresentation): 
     9        (WebHistoryItem::dictionaryRepresentation): 
     10 
    1112009-01-29  Adam Roben  <aroben@apple.com> 
    212 
  • trunk/WebKit/win/WebHistoryItem.cpp

    r40132 r40380  
    9898static CFStringRef lastVisitWasFailureKey = CFSTR("lastVisitWasFailure"); 
    9999static CFStringRef lastVisitWasHTTPNonGetKey = CFSTR("lastVisitWasHTTPNonGet"); 
     100static CFStringRef redirectURLsKey = CFSTR("redirectURLs"); 
    100101 
    101102HRESULT STDMETHODCALLTYPE WebHistoryItem::initFromDictionaryRepresentation(void* dictionary) 
     
    132133        return E_FAIL; 
    133134    bool lastVisitWasHTTPNonGet = lastVisitWasHTTPNonGetRef && CFBooleanGetValue(lastVisitWasHTTPNonGetRef); 
     135 
     136    std::auto_ptr<Vector<String> > redirectURLsVector; 
     137    if (CFArrayRef redirectURLsRef = static_cast<CFArrayRef>(CFDictionaryGetValue(dictionaryRef, redirectURLsKey))) { 
     138        CFIndex size = CFArrayGetCount(redirectURLsRef); 
     139        redirectURLs = std::auto_ptr<Vector<String> >(new Vector<String>(size)); 
     140        for (CFIndex i = 0; i < size; ++i) 
     141            (*redirectURLsVector)[i] = String(static_cast<CFStringRef>(CFArrayGetValueAtIndex(redirectURLsRef, i))); 
     142    } 
    134143 
    135144    historyItemWrappers().remove(m_historyItem.get()); 
     
    143152    if (lastVisitWasHTTPNonGet && (protocolIs(m_historyItem->urlString(), "http") || protocolIs(m_historyItem->urlString(), "https"))) 
    144153        m_historyItem->setLastVisitWasHTTPNonGet(true); 
     154 
     155    if (redirectURLsVector) 
     156        core(_private)->setRedirectURLs(redirectURLsVector); 
    145157 
    146158    return S_OK; 
     
    157169 
    158170    int keyCount = 0; 
    159     CFTypeRef keys[6]; 
    160     CFTypeRef values[6]; 
     171    CFTypeRef keys[7]; 
     172    CFTypeRef values[7]; 
    161173 
    162174    if (!m_historyItem->urlString().isEmpty()) { 
     
    186198        keys[keyCount] = lastVisitWasHTTPNonGetKey; 
    187199        values[keyCount++] = CFRetain(kCFBooleanTrue); 
     200    } 
     201 
     202    if (Vector<String>* redirectURLs = m_historyItem->redirectURLs()) { 
     203        size_t size = redirectURLs->size(); 
     204 
     205        CFStringRef* items = new CFStringRef[size]; 
     206        for (size_t i = 0; i < size; ++i) 
     207            items[i] = redirectURLs->at(i).createCFString(); 
     208        CFArrayRef result = CFArrayCreate(0, (const void**)items, size, &kCFTypeArrayCallBacks); 
     209        for (size_t i = 0; i < size; ++i) 
     210            CFRelease(items[i]); 
     211        delete[] items; 
     212 
     213        keys[keyCount] = redirectURLsKey; 
     214        values[keyCount++] = result; 
    188215    } 
    189216