diff options
author | jeremy@chromium.org <jeremy@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-09-02 16:22:02 +0000 |
---|---|---|
committer | jeremy@chromium.org <jeremy@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-09-02 16:22:02 +0000 |
commit | 9b9fe99f079f53eb1276afab14886af7e46b0288 (patch) | |
tree | d269f7ec3ada339ce784e44b2e11cc26e74d08b4 /chrome/browser/cocoa/import_progress_dialog.mm | |
parent | 185ef60458a4b929eea8f724b67317733e408998 (diff) | |
download | chromium_src-9b9fe99f079f53eb1276afab14886af7e46b0288.zip chromium_src-9b9fe99f079f53eb1276afab14886af7e46b0288.tar.gz chromium_src-9b9fe99f079f53eb1276afab14886af7e46b0288.tar.bz2 |
* Spin a modal loop so that messages that cause Chrome UI to be shown don't come through, this fixes a crash in the first run import dialog.
* Fail early if NSSDecryptor detects that the environment isn't set up write to load NSS libraries.
BUG=19169
TEST=See repro instructions in bug.
Review URL: http://codereview.chromium.org/179073
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@25174 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/cocoa/import_progress_dialog.mm')
-rw-r--r-- | chrome/browser/cocoa/import_progress_dialog.mm | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/chrome/browser/cocoa/import_progress_dialog.mm b/chrome/browser/cocoa/import_progress_dialog.mm index 86cd872..a971f80 100644 --- a/chrome/browser/cocoa/import_progress_dialog.mm +++ b/chrome/browser/cocoa/import_progress_dialog.mm @@ -138,7 +138,8 @@ NSString* keyForImportItem(ImportItem item) { [self closeDialog]; [self release]; - MessageLoop::current()->Quit(); + // Break out of modal event loop. + [NSApp stopModal]; } @end @@ -171,6 +172,16 @@ void StartImportingWithUI(gfx::NativeWindow parent_window, new ProfileWriter(target_profile), first_run); + + // Display the window while spinning a message loop. + // For details on why we need a modal message loop see http://crbug.com/19169 + NSWindow* progress_window = [progress_dialog_ window]; + NSModalSession session = [NSApp beginModalSessionForWindow:progress_window]; [progress_dialog_ showWindow:nil]; - MessageLoop::current()->Run(); + while(1) { + if ([NSApp runModalSession:session] != NSRunContinuesResponse) + break; + MessageLoop::current()->RunAllPending(); + } + [NSApp endModalSession:session]; } |