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

Unified Diff: chrome/browser/ui/cocoa/extensions/extension_install_dialog_controller.mm

Issue 9460045: Add Mac interface for installing bundles of extensions. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 10 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/cocoa/extensions/extension_install_dialog_controller.mm
diff --git a/chrome/browser/ui/cocoa/extensions/extension_install_dialog_controller.mm b/chrome/browser/ui/cocoa/extensions/extension_install_dialog_controller.mm
index b9b30465e0500953ded1ed67e9283862bbf74ea6..7b082f77df529554ad6587df143bcbab1e00c756 100644
--- a/chrome/browser/ui/cocoa/extensions/extension_install_dialog_controller.mm
+++ b/chrome/browser/ui/cocoa/extensions/extension_install_dialog_controller.mm
@@ -4,12 +4,14 @@
#import "chrome/browser/ui/cocoa/extensions/extension_install_dialog_controller.h"
+#include "base/i18n/rtl.h"
#include "base/mac/bundle_locations.h"
#include "base/mac/mac_util.h"
#include "base/memory/scoped_nsobject.h"
#include "base/string_util.h"
#include "base/sys_string_conversions.h"
#include "base/utf_string_conversions.h"
+#include "chrome/browser/extensions/bundle_installer.h"
#include "chrome/browser/extensions/extension_install_dialog.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_list.h"
@@ -23,9 +25,11 @@
using content::OpenURLParams;
using content::Referrer;
+using extensions::BundleInstaller;
@interface ExtensionInstallDialogController ()
-- (bool)isInlineInstall;
+- (BOOL)isBundleInstall;
+- (BOOL)isInlineInstall;
- (void)appendRatingStar:(const SkBitmap*)skiaImage;
@end
@@ -39,9 +43,9 @@ const CGFloat kWarningsSeparatorPadding = 14;
// contents.
const CGFloat kMaxControlHeight = 400;
-// Adjust a control's height so that its content its not clipped. Returns the
-// amount the control's height had to be adjusted.
Robert Sesek 2012/02/27 18:59:20 Why remove this comment?
jstritar 2012/03/05 18:05:08 Updated the comment.
-CGFloat AdjustControlHeightToFitContent(NSControl* control) {
+void OffsetControlVerticallyToFitContent(NSControl* control,
+ CGFloat* totalOffset) {
+ // Adjust the control's height so that its content is not clipped.
NSRect currentRect = [control frame];
NSRect fitRect = currentRect;
fitRect.size.height = kMaxControlHeight;
@@ -50,13 +54,12 @@ CGFloat AdjustControlHeightToFitContent(NSControl* control) {
[control setFrameSize:NSMakeSize(currentRect.size.width,
currentRect.size.height + offset)];
- return offset;
-}
-// Moves the control vertically by the specified amount.
-void OffsetControlVertically(NSControl* control, CGFloat amount) {
+ *totalOffset += offset;
+
+ // Move the control vertically by the new total offset.
NSPoint origin = [control frame].origin;
- origin.y += amount;
+ origin.y -= *totalOffset;
[control setFrameOrigin:origin];
}
@@ -72,6 +75,7 @@ void AppendRatingStarsShim(const SkBitmap* skiaImage, void* data) {
@synthesize iconView = iconView_;
@synthesize titleField = titleField_;
+@synthesize itemsField = itemsField_;
@synthesize subtitleField = subtitleField_;
@synthesize warningsField = warningsField_;
@synthesize cancelButton = cancelButton_;
@@ -98,6 +102,10 @@ void AppendRatingStarsShim(const SkBitmap* skiaImage, void* data) {
nibpath = [base::mac::FrameworkBundle()
pathForResource:@"ExtensionInstallPromptNoWarnings"
ofType:@"nib"];
+ } else if (prompt.type() == ExtensionInstallUI::BUNDLE_INSTALL_PROMPT) {
+ nibpath = [base::mac::FrameworkBundle()
+ pathForResource:@"ExtensionInstallPromptBundle"
+ ofType:@"nib"];
} else {
nibpath = [base::mac::FrameworkBundle()
pathForResource:@"ExtensionInstallPrompt"
@@ -162,7 +170,9 @@ void AppendRatingStarsShim(const SkBitmap* skiaImage, void* data) {
prompt_->GetUserCount())];
}
- [iconView_ setImage:prompt_->icon().ToNSImage()];
+ // The bundle install dialog has no icon.
+ if (![self isBundleInstall])
+ [iconView_ setImage:prompt_->icon().ToNSImage()];
// Resize |titleField_| to fit the title.
CGFloat originalTitleWidth = [titleField_ frame].size.width;
@@ -188,7 +198,37 @@ void AppendRatingStarsShim(const SkBitmap* skiaImage, void* data) {
-buttonDelta.width, 0)];
}
+ // The dialog is laid out in the NIB exactly how we want it assuming that
+ // each label fits on one line. However, for each label, we want to allow
+ // wrapping onto multiple lines. So we accumulate an offset by measuring how
+ // big each label wants to be, and comparing it to how big it actually is.
+ // Then we shift each label down and resize by the appropriate amount, then
+ // finally resize the window.
CGFloat totalOffset = 0.0;
+
+ if ([self isBundleInstall]) {
+ [subtitleField_ setStringValue:base::SysUTF16ToNSString(
+ prompt_->GetPermissionsHeading())];
+
+ // We display the list of extension names as a simple text string, seperated
+ // by newlines.
+ BundleInstaller::ItemList items = prompt_->bundle()->GetItemsWithState(
+ BundleInstaller::Item::STATE_PENDING);
+
+ NSMutableString* joinedItems = [NSMutableString string];
+ for (size_t i = 0; i < items.size(); ++i) {
+ if (i > 0)
+ [joinedItems appendString:@"\n"];
+ [joinedItems appendString:base::SysUTF16ToNSString(
+ items[i].GetNameForDisplay())];
+ }
+ [itemsField_ setStringValue:joinedItems];
+
+ // Adjust the controls to fit the list of extensions.
+ OffsetControlVerticallyToFitContent(titleField_, &totalOffset);
+ OffsetControlVerticallyToFitContent(itemsField_, &totalOffset);
+ }
+
// If there are any warnings, then we have to do some special layout.
if (prompt_->GetPermissionCount() > 0) {
[subtitleField_ setStringValue:base::SysUTF16ToNSString(
@@ -205,29 +245,23 @@ void AppendRatingStarsShim(const SkBitmap* skiaImage, void* data) {
}
[warningsField_ setStringValue:joinedWarnings];
- // The dialog is laid out in the NIB exactly how we want it assuming that
- // each label fits on one line. However, for each label, we want to allow
- // wrapping onto multiple lines. So we accumulate an offset by measuring how
- // big each label wants to be, and comparing it to how big it actually is.
- // Then we shift each label down and resize by the appropriate amount, then
- // finally resize the window.
-
- // Additionally, in the store version of the dialog the icon extends past
- // the one-line version of the permission field. Therefore when increasing
- // the window size for multi-line permissions we don't have to add the full
- // offset, only the part that extends past the icon.
+ // In the store version of the dialog the icon extends past the one-line
+ // version of the permission field. Therefore when increasing the window
+ // size for multi-line permissions we don't have to add the full offset,
+ // only the part that extends past the icon.
CGFloat warningsGrowthSlack = 0;
- if ([warningsField_ frame].origin.y > [iconView_ frame].origin.y) {
+ if (![self isBundleInstall] &&
+ [warningsField_ frame].origin.y > [iconView_ frame].origin.y) {
warningsGrowthSlack =
[warningsField_ frame].origin.y - [iconView_ frame].origin.y;
}
- totalOffset += AdjustControlHeightToFitContent(subtitleField_);
- OffsetControlVertically(subtitleField_, -totalOffset);
+ // Adjust the controls to fit the permission warnings.
+ OffsetControlVerticallyToFitContent(subtitleField_, &totalOffset);
+ OffsetControlVerticallyToFitContent(warningsField_, &totalOffset);
- totalOffset += AdjustControlHeightToFitContent(warningsField_);
- OffsetControlVertically(warningsField_, -totalOffset);
totalOffset = MAX(totalOffset - warningsGrowthSlack, 0);
+
Robert Sesek 2012/02/27 18:59:20 nit: remove
jstritar 2012/03/05 18:05:08 Done.
} else if ([self isInlineInstall]) {
// Inline installs that don't have a permissions section need to hide
// controls related to that and shrink the window by the space they take
@@ -248,7 +282,7 @@ void AppendRatingStarsShim(const SkBitmap* skiaImage, void* data) {
currentRect.origin.y - totalOffset,
currentRect.size.width,
currentRect.size.height + totalOffset)
- display:NO];
+ display:NO];
}
}
@@ -262,7 +296,11 @@ void AppendRatingStarsShim(const SkBitmap* skiaImage, void* data) {
[self autorelease];
}
-- (bool)isInlineInstall {
+- (BOOL)isBundleInstall {
+ return prompt_->type() == ExtensionInstallUI::BUNDLE_INSTALL_PROMPT;
+}
+
+- (BOOL)isInlineInstall {
return prompt_->type() == ExtensionInstallUI::INLINE_INSTALL_PROMPT;
}

Powered by Google App Engine
This is Rietveld 408576698