diff options
author | Kristian Monsen <kristianm@google.com> | 2011-05-11 20:53:37 +0100 |
---|---|---|
committer | Kristian Monsen <kristianm@google.com> | 2011-05-16 13:54:48 +0100 |
commit | 21d179b334e59e9a3bfcaed4c4430bef1bc5759d (patch) | |
tree | 64e2bb6da27af6a5c93ca34f6051584aafbfcb9e /chrome/browser/cocoa/external_protocol_dialog.mm | |
parent | 0c63f00edd6ed0482fd5cbcea937ca088baf7858 (diff) | |
download | external_chromium-21d179b334e59e9a3bfcaed4c4430bef1bc5759d.zip external_chromium-21d179b334e59e9a3bfcaed4c4430bef1bc5759d.tar.gz external_chromium-21d179b334e59e9a3bfcaed4c4430bef1bc5759d.tar.bz2 |
Merge Chromium at 10.0.621.0: Initial merge by git.
Change-Id: I070cc91c608dfa4a968a5a54c173260765ac8097
Diffstat (limited to 'chrome/browser/cocoa/external_protocol_dialog.mm')
-rw-r--r-- | chrome/browser/cocoa/external_protocol_dialog.mm | 152 |
1 files changed, 0 insertions, 152 deletions
diff --git a/chrome/browser/cocoa/external_protocol_dialog.mm b/chrome/browser/cocoa/external_protocol_dialog.mm deleted file mode 100644 index 0513ae0..0000000 --- a/chrome/browser/cocoa/external_protocol_dialog.mm +++ /dev/null @@ -1,152 +0,0 @@ -// Copyright (c) 2010 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/cocoa/external_protocol_dialog.h" - -#include "app/l10n_util_mac.h" -#include "base/message_loop.h" -#include "base/metrics/histogram.h" -#include "base/string_util.h" -#include "base/sys_string_conversions.h" -#include "base/utf_string_conversions.h" -#include "chrome/browser/external_protocol_handler.h" -#include "grit/chromium_strings.h" -#include "grit/generated_resources.h" - -/////////////////////////////////////////////////////////////////////////////// -// ExternalProtocolHandler - -// static -void ExternalProtocolHandler::RunExternalProtocolDialog( - const GURL& url, int render_process_host_id, int routing_id) { - [[ExternalProtocolDialogController alloc] initWithGURL:&url]; -} - -/////////////////////////////////////////////////////////////////////////////// -// ExternalProtocolDialogController - -@interface ExternalProtocolDialogController(Private) -- (void)alertEnded:(NSAlert *)alert - returnCode:(int)returnCode - contextInfo:(void*)contextInfo; -- (string16)appNameForProtocol; -@end - -@implementation ExternalProtocolDialogController -- (id)initWithGURL:(const GURL*)url { - DCHECK_EQ(MessageLoop::TYPE_UI, MessageLoop::current()->type()); - - url_ = *url; - creation_time_ = base::Time::Now(); - - string16 appName = [self appNameForProtocol]; - if (appName.length() == 0) { - // No registered apps for this protocol; give up and go home. - [self autorelease]; - return nil; - } - - alert_ = [[NSAlert alloc] init]; - - [alert_ setMessageText: - l10n_util::GetNSStringWithFixup(IDS_EXTERNAL_PROTOCOL_TITLE)]; - - NSButton* allowButton = [alert_ addButtonWithTitle: - l10n_util::GetNSStringWithFixup(IDS_EXTERNAL_PROTOCOL_OK_BUTTON_TEXT)]; - [allowButton setKeyEquivalent:@""]; // disallow as default - [alert_ addButtonWithTitle: - l10n_util::GetNSStringWithFixup( - IDS_EXTERNAL_PROTOCOL_CANCEL_BUTTON_TEXT)]; - - const int kMaxUrlWithoutSchemeSize = 256; - std::wstring elided_url_without_scheme; - ElideString(ASCIIToWide(url_.possibly_invalid_spec()), - kMaxUrlWithoutSchemeSize, &elided_url_without_scheme); - - NSString* urlString = l10n_util::GetNSStringFWithFixup( - IDS_EXTERNAL_PROTOCOL_INFORMATION, - ASCIIToUTF16(url_.scheme() + ":"), - WideToUTF16(elided_url_without_scheme)); - NSString* appString = l10n_util::GetNSStringFWithFixup( - IDS_EXTERNAL_PROTOCOL_APPLICATION_TO_LAUNCH, - appName); - NSString* warningString = - l10n_util::GetNSStringWithFixup(IDS_EXTERNAL_PROTOCOL_WARNING); - NSString* informativeText = - [NSString stringWithFormat:@"%@\n\n%@\n\n%@", - urlString, - appString, - warningString]; - - [alert_ setInformativeText:informativeText]; - - [alert_ setShowsSuppressionButton:YES]; - [[alert_ suppressionButton] setTitle: - l10n_util::GetNSStringWithFixup(IDS_EXTERNAL_PROTOCOL_CHECKBOX_TEXT)]; - - [alert_ beginSheetModalForWindow:nil // nil here makes it app-modal - modalDelegate:self - didEndSelector:@selector(alertEnded:returnCode:contextInfo:) - contextInfo:nil]; - - return self; -} - -- (void)dealloc { - [alert_ release]; - - [super dealloc]; -} - -- (void)alertEnded:(NSAlert *)alert - returnCode:(int)returnCode - contextInfo:(void*)contextInfo { - ExternalProtocolHandler::BlockState blockState = - ExternalProtocolHandler::UNKNOWN; - switch (returnCode) { - case NSAlertFirstButtonReturn: - blockState = ExternalProtocolHandler::DONT_BLOCK; - break; - case NSAlertSecondButtonReturn: - blockState = ExternalProtocolHandler::BLOCK; - break; - default: - NOTREACHED(); - } - - // Set the "don't warn me again" info. - if ([[alert_ suppressionButton] state] == NSOnState) - ExternalProtocolHandler::SetBlockState(url_.scheme(), blockState); - - if (blockState == ExternalProtocolHandler::DONT_BLOCK) { - UMA_HISTOGRAM_LONG_TIMES("clickjacking.launch_url", - base::Time::Now() - creation_time_); - - ExternalProtocolHandler::LaunchUrlWithoutSecurityCheck(url_); - } - - [self autorelease]; -} - -- (string16)appNameForProtocol { - NSURL* url = [NSURL URLWithString: - base::SysUTF8ToNSString(url_.possibly_invalid_spec())]; - CFURLRef openingApp = NULL; - OSStatus status = LSGetApplicationForURL((CFURLRef)url, - kLSRolesAll, - NULL, - &openingApp); - if (status != noErr) { - // likely kLSApplicationNotFoundErr - return string16(); - } - NSString* appPath = [(NSURL*)openingApp path]; - CFRelease(openingApp); // NOT A BUG; LSGetApplicationForURL retains for us - NSString* appDisplayName = - [[NSFileManager defaultManager] displayNameAtPath:appPath]; - - return base::SysNSStringToUTF16(appDisplayName); -} - -@end |