⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 webbackforwardlist.mm

📁 linux下开源浏览器WebKit的源码,市面上的很多商用浏览器都是移植自WebKit
💻 MM
字号:
/* * Copyright (C) 2005, 2007 Apple Inc.  All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1.  Redistributions of source code must retain the above copyright *     notice, this list of conditions and the following disclaimer.  * 2.  Redistributions in binary form must reproduce the above copyright *     notice, this list of conditions and the following disclaimer in the *     documentation and/or other materials provided with the distribution.  * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of *     its contributors may be used to endorse or promote products derived *     from this software without specific prior written permission.  * * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */#import "WebBackForwardList.h"#import "WebBackForwardListInternal.h"#import "WebFrameInternal.h"#import "WebHistoryItemInternal.h"#import "WebHistoryItemPrivate.h"#import "WebKitLogging.h"#import "WebNSObjectExtras.h"#import "WebPreferencesPrivate.h"#import "WebTypesInternal.h"#import "WebViewPrivate.h"#import <WebCore/BackForwardList.h>#import <WebCore/HistoryItem.h>#import <WebCore/Page.h>#import <WebCore/PageCache.h>#import <WebCore/Settings.h>#import <WebCore/ThreadCheck.h>#import <WebCore/WebCoreObjCExtras.h>#import <runtime/InitializeThreading.h>#import <wtf/Assertions.h>#import <wtf/RetainPtr.h>#import <wtf/StdLibExtras.h>using namespace WebCore;typedef HashMap<BackForwardList*, WebBackForwardList*> BackForwardListMap;static BackForwardListMap& backForwardLists(){    DEFINE_STATIC_LOCAL(BackForwardListMap, staticBackForwardLists, ());    return staticBackForwardLists;}@implementation WebBackForwardList (WebBackForwardListInternal)BackForwardList* core(WebBackForwardList *webBackForwardList){    if (!webBackForwardList)        return 0;    return reinterpret_cast<BackForwardList*>(webBackForwardList->_private);}WebBackForwardList *kit(BackForwardList* backForwardList){    if (!backForwardList)        return nil;    if (WebBackForwardList *webBackForwardList = backForwardLists().get(backForwardList))        return webBackForwardList;    return [[[WebBackForwardList alloc] initWithBackForwardList:backForwardList] autorelease];}- (id)initWithBackForwardList:(PassRefPtr<BackForwardList>)backForwardList{       WebCoreThreadViolationCheck();    self = [super init];    if (!self)        return nil;    _private = reinterpret_cast<WebBackForwardListPrivate*>(backForwardList.releaseRef());    backForwardLists().set(core(self), self);    return self;}@end@implementation WebBackForwardList+ (void)initialize{    JSC::initializeThreading();#ifndef BUILDING_ON_TIGER    WebCoreObjCFinalizeOnMainThread(self);#endif}- (id)init{    return [self initWithBackForwardList:BackForwardList::create(0)];}- (void)dealloc{    if (WebCoreObjCScheduleDeallocateOnMainThread([WebBackForwardList class], self))        return;    BackForwardList* backForwardList = core(self);    ASSERT(backForwardList);    if (backForwardList) {        ASSERT(backForwardList->closed());        backForwardLists().remove(backForwardList);        backForwardList->deref();    }    [super dealloc];}- (void)finalize{    WebCoreThreadViolationCheck();    BackForwardList* backForwardList = core(self);    ASSERT(backForwardList);    if (backForwardList) {        ASSERT(backForwardList->closed());        backForwardLists().remove(backForwardList);        backForwardList->deref();    }            [super finalize];}- (void)_close{    core(self)->close();}- (void)addItem:(WebHistoryItem *)entry{    core(self)->addItem(core(entry));        // Since the assumed contract with WebBackForwardList is that it retains its WebHistoryItems,    // the following line prevents a whole class of problems where a history item will be created in    // a function, added to the BFlist, then used in the rest of that function.    [[entry retain] autorelease];}- (void)removeItem:(WebHistoryItem *)item{    core(self)->removeItem(core(item));}- (BOOL)containsItem:(WebHistoryItem *)item{    return core(self)->containsItem(core(item));}- (void)goBack{    core(self)->goBack();}- (void)goForward{    core(self)->goForward();}- (void)goToItem:(WebHistoryItem *)item{    core(self)->goToItem(core(item));}- (WebHistoryItem *)backItem{    return [[kit(core(self)->backItem()) retain] autorelease];}- (WebHistoryItem *)currentItem{    return [[kit(core(self)->currentItem()) retain] autorelease];}- (WebHistoryItem *)forwardItem{    return [[kit(core(self)->forwardItem()) retain] autorelease];}static NSArray* vectorToNSArray(HistoryItemVector& list){    unsigned size = list.size();    NSMutableArray *result = [[[NSMutableArray alloc] initWithCapacity:size] autorelease];    for (unsigned i = 0; i < size; ++i)        [result addObject:kit(list[i].get())];    return result;}- (NSArray *)backListWithLimit:(int)limit{    HistoryItemVector list;    core(self)->backListWithLimit(limit, list);    return vectorToNSArray(list);}- (NSArray *)forwardListWithLimit:(int)limit{    HistoryItemVector list;    core(self)->forwardListWithLimit(limit, list);    return vectorToNSArray(list);}- (int)capacity{    return core(self)->capacity();}- (void)setCapacity:(int)size{    core(self)->setCapacity(size);}-(NSString *)description{    NSMutableString *result;        result = [NSMutableString stringWithCapacity:512];        [result appendString:@"\n--------------------------------------------\n"];        [result appendString:@"WebBackForwardList:\n"];        BackForwardList* backForwardList = core(self);    HistoryItemVector& entries = backForwardList->entries();        unsigned size = entries.size();    for (unsigned i = 0; i < size; ++i) {        if (entries[i] == backForwardList->currentItem()) {            [result appendString:@" >>>"];         } else {            [result appendString:@"    "];         }           [result appendFormat:@"%2d) ", i];        int currPos = [result length];        [result appendString:[kit(entries[i].get()) description]];        // shift all the contents over.  a bit slow, but this is for debugging        NSRange replRange = {currPos, [result length]-currPos};        [result replaceOccurrencesOfString:@"\n" withString:@"\n        " options:0 range:replRange];                [result appendString:@"\n"];    }    [result appendString:@"\n--------------------------------------------\n"];        return result;}- (void)setPageCacheSize:(NSUInteger)size{    [kit(core(self)->page()) setUsesPageCache:size != 0];}- (NSUInteger)pageCacheSize{    return [kit(core(self)->page()) usesPageCache] ? pageCache()->capacity() : 0;}- (int)backListCount{    return core(self)->backListCount();}- (int)forwardListCount{    return core(self)->forwardListCount();}- (WebHistoryItem *)itemAtIndex:(int)index{    return [[kit(core(self)->itemAtIndex(index)) retain] autorelease];}@end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -