Home | History | Annotate | Download | only in sender
      1 // Copyright (c) 2006, Google Inc.
      2 // All rights reserved.
      3 //
      4 // Redistribution and use in source and binary forms, with or without
      5 // modification, are permitted provided that the following conditions are
      6 // met:
      7 //
      8 //     * Redistributions of source code must retain the above copyright
      9 // notice, this list of conditions and the following disclaimer.
     10 //     * Redistributions in binary form must reproduce the above
     11 // copyright notice, this list of conditions and the following disclaimer
     12 // in the documentation and/or other materials provided with the
     13 // distribution.
     14 //     * Neither the name of Google Inc. nor the names of its
     15 // contributors may be used to endorse or promote products derived from
     16 // this software without specific prior written permission.
     17 //
     18 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     19 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     20 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     21 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     22 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     23 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     24 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     25 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     26 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     27 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     28 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     29 //
     30 // This component uses the HTTPMultipartUpload of the breakpad project to send
     31 // the minidump and associated data to the crash reporting servers.
     32 // It will perform throttling based on the parameters passed to it and will
     33 // prompt the user to send the minidump.
     34 
     35 #import <Cocoa/Cocoa.h>
     36 
     37 #include "client/mac/sender/uploader.h"
     38 #import "GTMDefines.h"
     39 
     40 // We're sublcassing NSTextField in order to override a particular
     41 // method (see the implementation) that lets us reject changes if they
     42 // are longer than a particular length.  Bindings would normally solve
     43 // this problem, but when we implemented a validation method, and
     44 // returned NO for strings that were too long, the UI was not updated
     45 // right away, which was a poor user experience.  The UI would be
     46 // updated as soon as the text field lost first responder status,
     47 // which isn't soon enough.  It is a known bug that the UI KVO didn't
     48 // work in the middle of a validation.
     49 @interface LengthLimitingTextField : NSTextField {
     50   @private
     51    NSUInteger maximumLength_;
     52 }
     53 
     54 - (void)setMaximumLength:(NSUInteger)maxLength;
     55 @end
     56 
     57 @interface Reporter : NSObject {
     58  @public
     59   IBOutlet NSWindow *alertWindow_;        // The alert window
     60 
     61   // Grouping boxes used for resizing.
     62   IBOutlet NSBox *headerBox_;
     63   IBOutlet NSBox *preEmailBox_;
     64   IBOutlet NSBox *emailSectionBox_;
     65   // Localized elements (or things that need to be moved during localization).
     66   IBOutlet NSTextField                *dialogTitle_;
     67   IBOutlet NSTextField                *commentMessage_;
     68   IBOutlet NSTextField                *emailMessage_;
     69   IBOutlet NSTextField                *emailLabel_;
     70   IBOutlet NSTextField                *privacyLinkLabel_;
     71   IBOutlet NSButton                   *sendButton_;
     72   IBOutlet NSButton                   *cancelButton_;
     73   IBOutlet LengthLimitingTextField    *emailEntryField_;
     74   IBOutlet LengthLimitingTextField    *commentsEntryField_;
     75   IBOutlet NSTextField                *countdownLabel_;
     76   IBOutlet NSView                     *privacyLinkArrow_;
     77 
     78   // Text field bindings, for user input.
     79   NSString *commentsValue_;                // Comments from the user
     80   NSString *emailValue_;                   // Email from the user
     81   NSString *countdownMessage_;             // Message indicating time
     82                                            // left for input.
     83  @private
     84   NSTimeInterval remainingDialogTime_;     // Keeps track of how long
     85                                            // we have until we cancel
     86                                            // the dialog
     87   NSTimer *messageTimer_;                  // Timer we use to update
     88                                            // the dialog
     89   Uploader* uploader_;                     // Uploader we use to send the data.
     90 }
     91 
     92 // Stops the modal panel with an NSAlertDefaultReturn value. This is the action
     93 // invoked by the "Send Report" button.
     94 - (IBAction)sendReport:(id)sender;
     95 // Stops the modal panel with an NSAlertAlternateReturn value. This is the
     96 // action invoked by the "Cancel" button.
     97 - (IBAction)cancel:(id)sender;
     98 // Opens the Privacy Policy url in the default web browser.
     99 - (IBAction)showPrivacyPolicy:(id)sender;
    100 
    101 // Delegate methods for the NSTextField for comments. We want to capture the
    102 // Return key and use it to send the message when no text has been entered.
    103 // Otherwise, we want Return to add a carriage return to the comments field.
    104 - (BOOL)control:(NSControl *)control textView:(NSTextView *)textView
    105                           doCommandBySelector:(SEL)commandSelector;
    106 
    107 // Accessors to make bindings work
    108 - (NSString *)commentsValue;
    109 - (void)setCommentsValue:(NSString *)value;
    110 
    111 - (NSString *)emailValue;
    112 - (void)setEmailValue:(NSString *)value;
    113 
    114 - (NSString *)countdownMessage;
    115 - (void)setCountdownMessage:(NSString *)value;
    116 
    117 @end
    118