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

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

Issue 2005443002: Implement bluetooth chooser for Chrome Apps on Mac (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@refactor_chooser_bubble_ui_cocoa
Patch Set: rebase and address comments Created 4 years, 6 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
(Empty)
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
3 // found in the LICENSE file.
4
5 #import "chrome/browser/ui/cocoa/extensions/chooser_dialog_cocoa_controller.h"
6
7 #include "base/strings/sys_string_conversions.h"
8 #include "base/strings/utf_string_conversions.h"
9 #import "chrome/browser/ui/cocoa/chooser_content_view.h"
10 #import "chrome/browser/ui/cocoa/extensions/chooser_dialog_cocoa.h"
11 #include "chrome/grit/generated_resources.h"
12 #include "components/chooser_controller/chooser_controller.h"
13 #include "components/url_formatter/elide_url.h"
14 #include "content/public/browser/web_contents.h"
15 #include "extensions/browser/extension_registry.h"
16 #import "ui/base/l10n/l10n_util_mac.h"
17 #include "url/gurl.h"
18 #include "url/origin.h"
19
20 @implementation ChooserDialogCocoaController
21
22 - (instancetype)
23 initWithChooserDialogCocoa:(ChooserDialogCocoa*)chooserDialogCocoa
24 chooserController:(ChooserController*)chooserController {
25 DCHECK(chooserDialogCocoa);
26 DCHECK(chooserController);
27 if ((self = [super init])) {
28 chooserDialogCocoa_ = chooserDialogCocoa;
29 chooserController_ = chooserController;
30 }
31
32 base::string16 chooserTitle;
33 url::Origin origin = chooserController_->GetOrigin();
34 content::WebContents* web_contents = chooserDialogCocoa_->web_contents();
35 content::BrowserContext* browser_context = web_contents->GetBrowserContext();
36 extensions::ExtensionRegistry* extension_registry =
37 extensions::ExtensionRegistry::Get(browser_context);
38 if (extension_registry) {
39 const extensions::Extension* extension =
40 extension_registry->enabled_extensions().GetExtensionOrAppByURL(
41 GURL(origin.Serialize()));
42 if (extension)
43 chooserTitle = base::UTF8ToUTF16(extension->name());
44 }
45
46 if (chooserTitle.empty()) {
47 chooserTitle = url_formatter::FormatOriginForSecurityDisplay(
48 origin, url_formatter::SchemeDisplay::OMIT_CRYPTOGRAPHIC);
49 }
50
51 chooserContentView_.reset([[ChooserContentView alloc]
52 initWithChooserTitle:l10n_util::GetNSStringF(IDS_CHOOSER_BUBBLE_PROMPT,
53 chooserTitle)]);
54
55 tableView_ = [chooserContentView_ tableView];
56 connectButton_ = [chooserContentView_ connectButton];
57 cancelButton_ = [chooserContentView_ cancelButton];
58 helpButton_ = [chooserContentView_ helpButton];
59
60 [connectButton_ setTarget:self];
61 [connectButton_ setAction:@selector(onConnect:)];
62 [cancelButton_ setTarget:self];
63 [cancelButton_ setAction:@selector(onCancel:)];
64 [tableView_ setDelegate:self];
65 [tableView_ setDataSource:self];
66 [helpButton_ setTarget:self];
67 [helpButton_ setAction:@selector(onHelpPressed:)];
68 self.view = chooserContentView_;
69 [self updateTableView];
70
71 return self;
72 }
73
74 - (NSInteger)numberOfRowsInTableView:(NSTableView*)tableView {
75 // When there are no devices, the table contains a message saying there are
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 }
80
81 - (id)tableView:(NSTableView*)tableView
82 objectValueForTableColumn:(NSTableColumn*)tableColumn
83 row:(NSInteger)rowIndex {
84 NSInteger num_options =
85 static_cast<NSInteger>(chooserController_->NumOptions());
86 if (num_options == 0) {
87 DCHECK_EQ(0, rowIndex);
88 return l10n_util::GetNSString(IDS_CHOOSER_BUBBLE_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 }
96
97 - (BOOL)tableView:(NSTableView*)aTableView
98 shouldEditTableColumn:(NSTableColumn*)aTableColumn
99 row:(NSInteger)rowIndex {
100 return NO;
101 }
102
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 selects the next item if the current
113 // item is removed, so here it tracks if the removed item is the item
114 // that was previously selected, if so, deselect it.
115 if ([tableView_ selectedRow] == index)
116 [tableView_ deselectRow:index];
117
118 [self updateTableView];
119 }
120
121 - (void)updateTableView {
122 [tableView_ setEnabled:chooserController_->NumOptions() > 0];
123 [tableView_ reloadData];
124 }
125
126 - (void)tableViewSelectionDidChange:(NSNotification*)aNotification {
127 [connectButton_ setEnabled:[tableView_ numberOfSelectedRows] > 0];
128 }
129
130 - (void)onConnect:(id)sender {
131 NSInteger row = [tableView_ selectedRow];
132 chooserDialogCocoa_->Dismissed();
133 chooserController_->Select(row);
134 }
135
136 - (void)onCancel:(id)sender {
137 chooserDialogCocoa_->Dismissed();
138 chooserController_->Cancel();
139 }
140
141 - (void)onHelpPressed:(id)sender {
142 chooserController_->OpenHelpCenterUrl();
143 }
144
145 - (ChooserContentView*)chooserContentView {
146 return chooserContentView_.get();
147 }
148
149 @end
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698