1// Copyright (c) 2012 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#ifndef CHROME_BROWSER_UI_COCOA_EXTENSIONS_EXTENSION_INSTALL_VIEW_CONTROLLER_H_
6#define CHROME_BROWSER_UI_COCOA_EXTENSIONS_EXTENSION_INSTALL_VIEW_CONTROLLER_H_
7
8#include <vector>
9
10#import <Cocoa/Cocoa.h>
11
12#include "base/mac/scoped_nsobject.h"
13#include "base/memory/ref_counted.h"
14#include "base/strings/string16.h"
15#include "chrome/browser/extensions/extension_install_prompt.h"
16#include "ui/gfx/image/image_skia.h"
17
18namespace content {
19class PageNavigator;
20}
21
22// Displays the extension or bundle install prompt, and notifies the
23// ExtensionInstallPrompt::Delegate of success or failure
24@interface ExtensionInstallViewController : NSViewController
25                                           <NSOutlineViewDataSource,
26                                            NSOutlineViewDelegate> {
27  IBOutlet NSImageView* iconView_;
28  IBOutlet NSTextField* titleField_;
29  IBOutlet NSTextField* itemsField_;
30  IBOutlet NSButton* cancelButton_;
31  IBOutlet NSButton* okButton_;
32
33  // Present only when the dialog has permission warnings issues to display.
34  IBOutlet NSOutlineView* outlineView_;
35
36  // Present only in the install dialogs with webstore data (inline and
37  // external).
38  IBOutlet NSBox* warningsSeparator_; // Only when there are permissions.
39  IBOutlet NSView* ratingStars_;
40  IBOutlet NSTextField* ratingCountField_;
41  IBOutlet NSTextField* userCountField_;
42  IBOutlet NSButton* storeLinkButton_;
43
44  content::PageNavigator* navigator_;  // weak
45  ExtensionInstallPrompt::Delegate* delegate_;  // weak
46  scoped_refptr<ExtensionInstallPrompt::Prompt> prompt_;
47
48  base::scoped_nsobject<NSArray> warnings_;
49  BOOL isComputingRowHeight_;
50}
51
52// For unit test use only.
53@property(nonatomic, readonly) NSImageView* iconView;
54@property(nonatomic, readonly) NSTextField* titleField;
55@property(nonatomic, readonly) NSTextField* itemsField;
56@property(nonatomic, readonly) NSButton* cancelButton;
57@property(nonatomic, readonly) NSButton* okButton;
58@property(nonatomic, readonly) NSOutlineView* outlineView;
59@property(nonatomic, readonly) NSBox* warningsSeparator;
60@property(nonatomic, readonly) NSView* ratingStars;
61@property(nonatomic, readonly) NSTextField* ratingCountField;
62@property(nonatomic, readonly) NSTextField* userCountField;
63@property(nonatomic, readonly) NSButton* storeLinkButton;
64
65- (id)initWithNavigator:(content::PageNavigator*)navigator
66               delegate:(ExtensionInstallPrompt::Delegate*)delegate
67                 prompt:(scoped_refptr<ExtensionInstallPrompt::Prompt>)prompt;
68- (IBAction)storeLinkClicked:(id)sender; // Callback for "View details" link.
69- (IBAction)cancel:(id)sender;
70- (IBAction)ok:(id)sender;
71
72@end
73
74#endif  // CHROME_BROWSER_UI_COCOA_EXTENSIONS_EXTENSION_INSTALL_VIEW_CONTROLLER_H_
75