Index: chrome/browser/ui/cocoa/bug_report_window_controller.mm |
diff --git a/chrome/browser/ui/cocoa/bug_report_window_controller.mm b/chrome/browser/ui/cocoa/bug_report_window_controller.mm |
deleted file mode 100644 |
index abe5a53768055839f3c22deae49fbd3a747347fd..0000000000000000000000000000000000000000 |
--- a/chrome/browser/ui/cocoa/bug_report_window_controller.mm |
+++ /dev/null |
@@ -1,232 +0,0 @@ |
-// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#import "chrome/browser/ui/cocoa/bug_report_window_controller.h" |
- |
-#include "base/mac/mac_util.h" |
-#include "base/sys_string_conversions.h" |
-#include "chrome/browser/bug_report_util.h" |
-#include "chrome/browser/ui/window_snapshot/window_snapshot.h" |
-#include "content/browser/tab_contents/tab_contents.h" |
-#include "content/browser/tab_contents/tab_contents_view.h" |
-#include "grit/chromium_strings.h" |
-#include "grit/generated_resources.h" |
-#include "third_party/GTM/AppKit/GTMUILocalizerAndLayoutTweaker.h" |
-#include "ui/base/l10n/l10n_util_mac.h" |
- |
-@implementation BugReportWindowController |
- |
-@synthesize bugDescription = bugDescription_; |
-@synthesize bugTypeIndex = bugTypeIndex_; |
-@synthesize pageURL = pageURL_; |
-@synthesize pageTitle = pageTitle_; |
-@synthesize sendScreenshot = sendScreenshot_; |
-@synthesize disableScreenshotCheckbox = disableScreenshotCheckbox_; |
-@synthesize bugTypeList = bugTypeList_; |
- |
-- (id)initWithTabContents:(TabContents*)currentTab |
- profile:(Profile*)profile { |
- NSString* nibpath = [base::mac::MainAppBundle() pathForResource:@"ReportBug" |
- ofType:@"nib"]; |
- if ((self = [super initWithWindowNibPath:nibpath owner:self])) { |
- currentTab_ = currentTab; |
- profile_ = profile; |
- |
- // The order of strings in this array must match the order of the bug types |
- // declared below in the bugTypeFromIndex function. |
- bugTypeList_ = [[NSMutableArray alloc] initWithObjects: |
- l10n_util::GetNSStringWithFixup(IDS_BUGREPORT_CHROME_MISBEHAVES), |
- l10n_util::GetNSStringWithFixup(IDS_BUGREPORT_SOMETHING_MISSING), |
- l10n_util::GetNSStringWithFixup(IDS_BUGREPORT_BROWSER_CRASH), |
- l10n_util::GetNSStringWithFixup(IDS_BUGREPORT_OTHER_PROBLEM), |
- nil]; |
- |
- pngHeight_ = 0; |
- pngWidth_ = 0; |
- |
- if (currentTab_ != NULL) { |
- // Get data from current tab, if one exists. This dialog could be called |
- // from the main menu with no tab contents, so currentTab_ is not |
- // guaranteed to be non-NULL. |
- // TODO(mirandac): This dialog should be a tab-modal sheet if a browser |
- // window exists. |
- [self setSendScreenshot:YES]; |
- [self setDisableScreenshotCheckbox:NO]; |
- // Insert menu items about bugs related to specific pages. |
- [bugTypeList_ insertObjects: |
- [NSArray arrayWithObjects: |
- l10n_util::GetNSStringWithFixup(IDS_BUGREPORT_PAGE_WONT_LOAD), |
- l10n_util::GetNSStringWithFixup(IDS_BUGREPORT_PAGE_LOOKS_ODD), |
- l10n_util::GetNSStringWithFixup(IDS_BUGREPORT_PHISHING_PAGE), |
- l10n_util::GetNSStringWithFixup(IDS_BUGREPORT_CANT_SIGN_IN), |
- nil] |
- atIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, 4)]]; |
- |
- [self setPageURL:base::SysUTF8ToNSString( |
- currentTab_->controller().GetActiveEntry()->url().spec())]; |
- [self setPageTitle:base::SysUTF16ToNSString(currentTab_->GetTitle())]; |
- gfx::Rect pngRect = browser::GrabWindowSnapshot( |
- currentTab_->view()->GetTopLevelNativeWindow(), &pngData_); |
- pngWidth_ = pngRect.width(); |
- pngHeight_ = pngRect.height(); |
- } else { |
- // If no current tab exists, create a menu without the "broken page" |
- // options, with page URL and title empty, and screenshot disabled. |
- [self setSendScreenshot:NO]; |
- [self setDisableScreenshotCheckbox:YES]; |
- } |
- } |
- return self; |
-} |
- |
-- (void)dealloc { |
- [pageURL_ release]; |
- [pageTitle_ release]; |
- [bugDescription_ release]; |
- [bugTypeList_ release]; |
- [bugTypeDictionary_ release]; |
- [super dealloc]; |
-} |
- |
-// Delegate callback so that closing the window deletes the controller. |
-- (void)windowWillClose:(NSNotification*)notification { |
- [self autorelease]; |
-} |
- |
-- (void)closeDialog { |
- [NSApp stopModal]; |
- [[self window] close]; |
-} |
- |
-- (void)runModalDialog { |
- NSWindow* bugReportWindow = [self window]; |
- [bugReportWindow center]; |
- [NSApp runModalForWindow:bugReportWindow]; |
-} |
- |
-- (IBAction)sendReport:(id)sender { |
- if ([self isPhishingReport]) { |
- BugReportUtil::ReportPhishing(currentTab_, |
- pageURL_ ? base::SysNSStringToUTF8(pageURL_) : ""); |
- } else { |
- BugReportUtil::SendReport( |
- profile_, |
- [self bugTypeFromIndex], |
- base::SysNSStringToUTF8(pageURL_), |
- base::SysNSStringToUTF8(bugDescription_), |
- sendScreenshot_ && !pngData_.empty() ? |
- reinterpret_cast<const char *>(&(pngData_[0])) : NULL, |
- pngData_.size(), pngWidth_, pngHeight_); |
- } |
- [self closeDialog]; |
-} |
- |
-- (IBAction)cancel:(id)sender { |
- [self closeDialog]; |
-} |
- |
-- (BOOL)isPhishingReport { |
- return [self bugTypeFromIndex] == BugReportUtil::PHISHING_PAGE; |
-} |
- |
-- (int)bugTypeFromIndex { |
- // The order of these bugs must match the ordering in the bugTypeList_, |
- // and thereby the menu in the popup button in the dialog box. |
- const BugReportUtil::BugType typesForMenuIndices[] = { |
- BugReportUtil::PAGE_WONT_LOAD, |
- BugReportUtil::PAGE_LOOKS_ODD, |
- BugReportUtil::PHISHING_PAGE, |
- BugReportUtil::CANT_SIGN_IN, |
- BugReportUtil::CHROME_MISBEHAVES, |
- BugReportUtil::SOMETHING_MISSING, |
- BugReportUtil::BROWSER_CRASH, |
- BugReportUtil::OTHER_PROBLEM |
- }; |
- // The bugs for the shorter menu start at index 4. |
- NSUInteger adjustedBugTypeIndex_ = [bugTypeList_ count] == 8 ? bugTypeIndex_ : |
- bugTypeIndex_ + 4; |
- DCHECK_LT(adjustedBugTypeIndex_, arraysize(typesForMenuIndices)); |
- return typesForMenuIndices[adjustedBugTypeIndex_]; |
-} |
- |
-// Custom setter to update the UI for different bug types. |
-- (void)setBugTypeIndex:(NSUInteger)bugTypeIndex { |
- bugTypeIndex_ = bugTypeIndex; |
- |
- // The "send" button's title is based on the type of report. |
- NSString* buttonTitle = [self isPhishingReport] ? |
- l10n_util::GetNSStringWithFixup(IDS_BUGREPORT_SEND_PHISHING_REPORT) : |
- l10n_util::GetNSStringWithFixup(IDS_BUGREPORT_SEND_REPORT); |
- if (![buttonTitle isEqualTo:[sendReportButton_ title]]) { |
- NSRect sendFrame1 = [sendReportButton_ frame]; |
- NSRect cancelFrame1 = [cancelButton_ frame]; |
- |
- [sendReportButton_ setTitle:buttonTitle]; |
- CGFloat deltaWidth = |
- [GTMUILocalizerAndLayoutTweaker sizeToFitView:sendReportButton_].width; |
- |
- NSRect sendFrame2 = [sendReportButton_ frame]; |
- sendFrame2.origin.x -= deltaWidth; |
- NSRect cancelFrame2 = cancelFrame1; |
- cancelFrame2.origin.x -= deltaWidth; |
- |
- // Since the buttons get updated/resize, use a quick animation so it is |
- // a little less jarring in the UI. |
- NSDictionary* sendReportButtonResize = |
- [NSDictionary dictionaryWithObjectsAndKeys: |
- sendReportButton_, NSViewAnimationTargetKey, |
- [NSValue valueWithRect:sendFrame1], NSViewAnimationStartFrameKey, |
- [NSValue valueWithRect:sendFrame2], NSViewAnimationEndFrameKey, |
- nil]; |
- NSDictionary* cancelButtonResize = |
- [NSDictionary dictionaryWithObjectsAndKeys: |
- cancelButton_, NSViewAnimationTargetKey, |
- [NSValue valueWithRect:cancelFrame1], NSViewAnimationStartFrameKey, |
- [NSValue valueWithRect:cancelFrame2], NSViewAnimationEndFrameKey, |
- nil]; |
- NSAnimation* animation = |
- [[[NSViewAnimation alloc] initWithViewAnimations: |
- [NSArray arrayWithObjects:sendReportButtonResize, cancelButtonResize, |
- nil]] autorelease]; |
- const NSTimeInterval kQuickTransitionInterval = 0.1; |
- [animation setDuration:kQuickTransitionInterval]; |
- [animation startAnimation]; |
- |
- // Save or reload description when moving between phishing page and other |
- // bug report types. |
- if ([self isPhishingReport]) { |
- saveBugDescription_.reset([[self bugDescription] retain]); |
- [self setBugDescription:nil]; |
- saveSendScreenshot_ = sendScreenshot_; |
- [self setSendScreenshot:NO]; |
- } else { |
- [self setBugDescription:saveBugDescription_.get()]; |
- saveBugDescription_.reset(); |
- [self setSendScreenshot:saveSendScreenshot_]; |
- } |
- } |
-} |
- |
-- (BOOL)control:(NSControl*)control textView:(NSTextView*)textView |
- doCommandBySelector:(SEL)commandSelector { |
- if (commandSelector == @selector(insertNewline:)) { |
- [textView insertNewlineIgnoringFieldEditor:self]; |
- return YES; |
- } |
- return NO; |
-} |
- |
-// BugReportWindowController needs to change the title of the Send Report |
-// button when the user chooses the phishing bug type, so we need to bind |
-// the function that changes the button title to the bug type key. |
-+ (NSSet*)keyPathsForValuesAffectingValueForKey:(NSString*)key { |
- NSSet* paths = [super keyPathsForValuesAffectingValueForKey:key]; |
- if ([key isEqualToString:@"isPhishingReport"]) { |
- paths = [paths setByAddingObject:@"bugTypeIndex"]; |
- } |
- return paths; |
-} |
- |
-@end |
- |