Add a test harness for running UI tests on the iOS Simulator
[WebKit-https.git] / Tools / MobileMiniBrowser / MobileMiniBrowser / TabViewController.m
1 /*
2  * Copyright (C) 2016 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 "TabViewController.h"
28
29 #import "WebViewController.h"
30 #import <WebKit/WKWebView.h>
31
32 void *ContentSizeContext = &ContentSizeContext;
33
34 @implementation TabViewController
35
36 - (void)dealloc
37 {
38     [self.tableView removeObserver:self forKeyPath:@"contentSize" context:ContentSizeContext];
39 }
40
41 - (void)viewDidLoad
42 {
43     [super viewDidLoad];
44     [self.tableView addObserver:self forKeyPath:@"contentSize" options:NSKeyValueObservingOptionNew context:ContentSizeContext];
45 }
46
47 - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
48 {
49     if (context == ContentSizeContext)
50         self.preferredContentSize = CGSizeMake(self.preferredContentSize.width, self.tableView.contentSize.height);
51 }
52
53 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
54 {
55     static NSString *MyIdentifier = @"MyReuseIdentifier";
56     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
57     if (!cell)
58         cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault  reuseIdentifier:MyIdentifier];
59
60     if (indexPath.section == 1) {
61         cell.textLabel.text = @"New...";
62         return cell;
63     }
64
65     WKWebView *webView = [self.parent.webViews objectAtIndex:indexPath.row];
66     cell.textLabel.text = webView.title;
67     return cell;
68 }
69
70 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
71 {
72     if (section == 1)
73         return 1;
74     return self.parent.webViews.count;
75 }
76
77 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
78 {
79     return 2;
80 }
81
82 - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
83 {
84     return indexPath.section != 1;
85 }
86
87 - (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
88 {
89     return NO;
90 }
91
92 - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
93 {
94     if (indexPath.section == 2)
95         return;
96
97     [self.parent removeWebViewAtIndex:indexPath.row];
98     [tableView reloadData];
99 }
100
101 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
102 {
103     if (indexPath.section == 1)
104         [self.parent addWebView];
105     else
106         [self.parent selectWebViewAtIndex:indexPath.row];
107     [self.parent dismissViewControllerAnimated:YES completion:nil];
108 }
109
110 @end