Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(308)

Side by Side Diff: chrome/browser/ui/cocoa/extensions/chooser_dialog_cocoa_controller.mm

Issue 2086663003: Change ChooserController ownership model (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: removed temporary unique ptr at ChooserBubbleUiCocoa Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #import "chrome/browser/ui/cocoa/extensions/chooser_dialog_cocoa_controller.h" 5 #import "chrome/browser/ui/cocoa/extensions/chooser_dialog_cocoa_controller.h"
6 6
7 #include "base/strings/sys_string_conversions.h" 7 #include "base/strings/sys_string_conversions.h"
8 #include "base/strings/utf_string_conversions.h" 8 #include "base/strings/utf_string_conversions.h"
9 #import "chrome/browser/ui/cocoa/chooser_content_view_cocoa.h" 9 #import "chrome/browser/ui/cocoa/chooser_content_view_cocoa.h"
10 #import "chrome/browser/ui/cocoa/extensions/chooser_dialog_cocoa.h" 10 #import "chrome/browser/ui/cocoa/extensions/chooser_dialog_cocoa.h"
11 #include "chrome/grit/generated_resources.h" 11 #include "chrome/grit/generated_resources.h"
12 #include "components/chooser_controller/chooser_controller.h" 12 #include "components/chooser_controller/chooser_controller.h"
13 #include "components/url_formatter/elide_url.h" 13 #include "components/url_formatter/elide_url.h"
14 #include "content/public/browser/web_contents.h" 14 #include "content/public/browser/web_contents.h"
15 #include "extensions/browser/extension_registry.h" 15 #include "extensions/browser/extension_registry.h"
16 #import "ui/base/l10n/l10n_util_mac.h" 16 #import "ui/base/l10n/l10n_util_mac.h"
17 #include "url/gurl.h" 17 #include "url/gurl.h"
18 #include "url/origin.h" 18 #include "url/origin.h"
19 19
20 @implementation ChooserDialogCocoaController 20 @implementation ChooserDialogCocoaController
21 21
22 - (instancetype) 22 - (instancetype)
23 initWithChooserDialogCocoa:(ChooserDialogCocoa*)chooserDialogCocoa 23 initWithChooserDialogCocoa:(ChooserDialogCocoa*)chooserDialogCocoa
24 chooserController:(ChooserController*)chooserController { 24 chooserController:
25 (std::unique_ptr<ChooserController>)chooserController {
25 DCHECK(chooserDialogCocoa); 26 DCHECK(chooserDialogCocoa);
26 DCHECK(chooserController); 27 DCHECK(chooserController);
27 if ((self = [super init])) { 28 if ((self = [super init]))
28 chooserDialogCocoa_ = chooserDialogCocoa; 29 chooserDialogCocoa_ = chooserDialogCocoa;
29 chooserController_ = chooserController;
30 }
31 30
32 base::string16 chooserTitle; 31 base::string16 chooserTitle;
33 url::Origin origin = chooserController_->GetOrigin(); 32 url::Origin origin = chooserController->GetOrigin();
34 content::WebContents* web_contents = chooserDialogCocoa_->web_contents(); 33 content::WebContents* web_contents = chooserDialogCocoa_->web_contents();
35 content::BrowserContext* browser_context = web_contents->GetBrowserContext(); 34 content::BrowserContext* browser_context = web_contents->GetBrowserContext();
36 extensions::ExtensionRegistry* extension_registry = 35 extensions::ExtensionRegistry* extension_registry =
37 extensions::ExtensionRegistry::Get(browser_context); 36 extensions::ExtensionRegistry::Get(browser_context);
38 if (extension_registry) { 37 if (extension_registry) {
39 const extensions::Extension* extension = 38 const extensions::Extension* extension =
40 extension_registry->enabled_extensions().GetExtensionOrAppByURL( 39 extension_registry->enabled_extensions().GetExtensionOrAppByURL(
41 GURL(origin.Serialize())); 40 GURL(origin.Serialize()));
42 if (extension) 41 if (extension)
43 chooserTitle = base::UTF8ToUTF16(extension->name()); 42 chooserTitle = base::UTF8ToUTF16(extension->name());
44 } 43 }
45 44
46 if (chooserTitle.empty()) { 45 if (chooserTitle.empty()) {
47 chooserTitle = url_formatter::FormatOriginForSecurityDisplay( 46 chooserTitle = url_formatter::FormatOriginForSecurityDisplay(
48 origin, url_formatter::SchemeDisplay::OMIT_CRYPTOGRAPHIC); 47 origin, url_formatter::SchemeDisplay::OMIT_CRYPTOGRAPHIC);
49 } 48 }
50 49
51 chooserContentView_.reset([[ChooserContentViewCocoa alloc] 50 chooserContentView_.reset([[ChooserContentViewCocoa alloc]
52 initWithChooserTitle:l10n_util::GetNSStringF(IDS_DEVICE_CHOOSER_PROMPT, 51 initWithChooserTitle:l10n_util::GetNSStringF(IDS_DEVICE_CHOOSER_PROMPT,
53 chooserTitle)]); 52 chooserTitle)
53 chooserController:std::move(chooserController)]);
54 54
55 tableView_ = [chooserContentView_ tableView]; 55 tableView_ = [chooserContentView_ tableView];
56 connectButton_ = [chooserContentView_ connectButton]; 56 connectButton_ = [chooserContentView_ connectButton];
57 cancelButton_ = [chooserContentView_ cancelButton]; 57 cancelButton_ = [chooserContentView_ cancelButton];
58 helpButton_ = [chooserContentView_ helpButton];
59 58
60 [connectButton_ setTarget:self]; 59 [connectButton_ setTarget:self];
61 [connectButton_ setAction:@selector(onConnect:)]; 60 [connectButton_ setAction:@selector(onConnect:)];
62 [cancelButton_ setTarget:self]; 61 [cancelButton_ setTarget:self];
63 [cancelButton_ setAction:@selector(onCancel:)]; 62 [cancelButton_ setAction:@selector(onCancel:)];
64 [tableView_ setDelegate:self]; 63 [tableView_ setDelegate:self];
65 [tableView_ setDataSource:self]; 64 [tableView_ setDataSource:self];
66 [helpButton_ setTarget:self];
67 [helpButton_ setAction:@selector(onHelpPressed:)];
68 self.view = chooserContentView_; 65 self.view = chooserContentView_;
69 [self updateTableView]; 66 [chooserContentView_ updateTableView];
70 67
71 return self; 68 return self;
72 } 69 }
73 70
74 - (NSInteger)numberOfRowsInTableView:(NSTableView*)tableView { 71 - (NSInteger)numberOfRowsInTableView:(NSTableView*)tableView {
75 // When there are no devices, the table contains a message saying there are 72 return [chooserContentView_ numberOfOptions];
76 // no devices, so the number of rows is always at least 1.
77 return std::max(static_cast<NSInteger>(chooserController_->NumOptions()),
78 static_cast<NSInteger>(1));
79 } 73 }
80 74
81 - (id)tableView:(NSTableView*)tableView 75 - (id)tableView:(NSTableView*)tableView
82 objectValueForTableColumn:(NSTableColumn*)tableColumn 76 objectValueForTableColumn:(NSTableColumn*)tableColumn
83 row:(NSInteger)rowIndex { 77 row:(NSInteger)rowIndex {
84 NSInteger num_options = 78 return [chooserContentView_ optionAtIndex:rowIndex];
85 static_cast<NSInteger>(chooserController_->NumOptions());
86 if (num_options == 0) {
87 DCHECK_EQ(0, rowIndex);
88 return l10n_util::GetNSString(IDS_DEVICE_CHOOSER_NO_DEVICES_FOUND_PROMPT);
89 }
90
91 DCHECK_GE(rowIndex, 0);
92 DCHECK_LT(rowIndex, num_options);
93 return base::SysUTF16ToNSString(
94 chooserController_->GetOption(static_cast<size_t>(rowIndex)));
95 } 79 }
96 80
97 - (BOOL)tableView:(NSTableView*)aTableView 81 - (BOOL)tableView:(NSTableView*)aTableView
98 shouldEditTableColumn:(NSTableColumn*)aTableColumn 82 shouldEditTableColumn:(NSTableColumn*)aTableColumn
99 row:(NSInteger)rowIndex { 83 row:(NSInteger)rowIndex {
100 return NO; 84 return NO;
101 } 85 }
102 86
103 - (void)onOptionsInitialized {
104 [self updateTableView];
105 }
106
107 - (void)onOptionAdded:(NSInteger)index {
108 [self updateTableView];
109 }
110
111 - (void)onOptionRemoved:(NSInteger)index {
112 // |tableView_| will automatically select the removed item's next item.
113 // So here it tracks if the removed item is the item that was currently
114 // selected, if so, deselect it. Also if the removed item is before the
115 // currently selected item, the currently selected item's index needs to
116 // be adjusted by one.
117 NSInteger selectedRow = [tableView_ selectedRow];
118 if (selectedRow == index)
119 [tableView_ deselectRow:index];
120 else if (selectedRow > index)
121 [tableView_ selectRowIndexes:[NSIndexSet indexSetWithIndex:selectedRow - 1]
122 byExtendingSelection:NO];
123
124 [self updateTableView];
125 }
126
127 - (void)updateTableView {
128 [tableView_ setEnabled:chooserController_->NumOptions() > 0];
129 [tableView_ reloadData];
130 }
131
132 - (void)tableViewSelectionDidChange:(NSNotification*)aNotification { 87 - (void)tableViewSelectionDidChange:(NSNotification*)aNotification {
133 [connectButton_ setEnabled:[tableView_ numberOfSelectedRows] > 0]; 88 [connectButton_ setEnabled:[tableView_ numberOfSelectedRows] > 0];
134 } 89 }
135 90
136 - (void)onConnect:(id)sender { 91 - (void)onConnect:(id)sender {
137 NSInteger row = [tableView_ selectedRow]; 92 [chooserContentView_ accept];
138 chooserDialogCocoa_->Dismissed(); 93 chooserDialogCocoa_->Dismissed();
139 chooserController_->Select(row);
140 } 94 }
141 95
142 - (void)onCancel:(id)sender { 96 - (void)onCancel:(id)sender {
97 [chooserContentView_ cancel];
143 chooserDialogCocoa_->Dismissed(); 98 chooserDialogCocoa_->Dismissed();
144 chooserController_->Cancel();
145 }
146
147 - (void)onHelpPressed:(id)sender {
148 chooserController_->OpenHelpCenterUrl();
149 } 99 }
150 100
151 - (ChooserContentViewCocoa*)chooserContentView { 101 - (ChooserContentViewCocoa*)chooserContentView {
152 return chooserContentView_.get(); 102 return chooserContentView_.get();
153 } 103 }
154 104
155 @end 105 @end
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698