7d62a1a35f798c6ea855fac4ab73d47e0b8e70a8
[WebKit-https.git] / Source / WebKit2 / UIProcess / Cocoa / WKBackForwardList.mm
1 /*
2  * Copyright (C) 2013 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23  * THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #import "config.h"
27 #import "WKBackForwardListInternal.h"
28
29 #if WK_API_ENABLED
30
31 #import "WKBackForwardListItemInternal.h"
32 #import "WKNSArray.h"
33 #import "WebBackForwardList.h"
34
35 using namespace WebKit;
36
37 @implementation WKBackForwardList {
38     RefPtr<WebBackForwardList> _list;
39 }
40
41 static WKBackForwardListItem *toWKBackForwardListItem(WebBackForwardListItem* item)
42 {
43     if (!item)
44         return nil;
45
46     return [[[WKBackForwardListItem alloc] _initWithItem:*item] autorelease];
47 }
48
49 - (WKBackForwardListItem *)currentItem
50 {
51     return toWKBackForwardListItem(_list->currentItem());
52 }
53
54 - (WKBackForwardListItem *)backItem
55 {
56     return toWKBackForwardListItem(_list->backItem());
57 }
58
59 - (WKBackForwardListItem *)forwardItem
60 {
61     return toWKBackForwardListItem(_list->forwardItem());
62 }
63
64 - (WKBackForwardListItem *)itemAtIndex:(NSInteger)index
65 {
66     return toWKBackForwardListItem(_list->itemAtIndex(index));
67 }
68
69 - (NSUInteger)backListCount
70 {
71     return _list->backListCount();
72 }
73
74 - (NSUInteger)forwardListCount
75 {
76     return _list->forwardListCount();
77 }
78
79 - (NSArray *)backListWithLimit:(NSUInteger)limit
80 {
81     RefPtr<ImmutableArray> list = _list->backListAsImmutableArrayWithLimit(limit);
82     if (!list)
83         return nil;
84
85     return [WKNSArray web_arrayWithImmutableArray:*list];
86 }
87
88 - (NSArray *)forwardListWithLimit:(NSUInteger)limit
89 {
90     RefPtr<ImmutableArray> list = _list->forwardListAsImmutableArrayWithLimit(limit);
91     if (!list)
92         return nil;
93
94     return [WKNSArray web_arrayWithImmutableArray:*list];
95 }
96
97 @end
98
99 #pragma mark -
100
101 @implementation WKBackForwardList (Internal)
102
103 - (id)_initWithList:(WebBackForwardList&)list
104 {
105     if (!(self = [super init]))
106         return nil;
107
108     _list = &list;
109
110     return self;
111 }
112
113 @end
114
115 #endif // WK_API_ENABLED