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

Unified Diff: chrome/browser/ui/cocoa/bug_report_window_controller.mm

Issue 7635017: Fix saved screenshots for feedback. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Mac fix 4 Created 9 years, 4 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/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
-

Powered by Google App Engine
This is Rietveld 408576698