| Index: webkit/tools/test_shell/test_shell_mac.mm
 | 
| diff --git a/webkit/tools/test_shell/test_shell_mac.mm b/webkit/tools/test_shell/test_shell_mac.mm
 | 
| deleted file mode 100644
 | 
| index 26ffce6cdff3d433cf73579d100c7d46ecb9844b..0000000000000000000000000000000000000000
 | 
| --- a/webkit/tools/test_shell/test_shell_mac.mm
 | 
| +++ /dev/null
 | 
| @@ -1,592 +0,0 @@
 | 
| -// Copyright (c) 2012 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.
 | 
| -
 | 
| -#include <ApplicationServices/ApplicationServices.h>
 | 
| -#import <Cocoa/Cocoa.h>
 | 
| -#import <objc/objc-runtime.h>
 | 
| -#include <sys/stat.h>
 | 
| -
 | 
| -#include "webkit/tools/test_shell/test_shell.h"
 | 
| -
 | 
| -#include "base/base_paths.h"
 | 
| -#include "base/basictypes.h"
 | 
| -#include "base/debug/debugger.h"
 | 
| -#include "base/file_util.h"
 | 
| -#include "base/files/file_path.h"
 | 
| -#include "base/logging.h"
 | 
| -#include "base/mac/bundle_locations.h"
 | 
| -#include "base/mac/mac_util.h"
 | 
| -#include "base/mac/scoped_nsautorelease_pool.h"
 | 
| -#include "base/message_loop.h"
 | 
| -#include "base/path_service.h"
 | 
| -#include "base/string16.h"
 | 
| -#include "base/strings/string_piece.h"
 | 
| -#include "base/utf_string_conversions.h"
 | 
| -#include "grit/webkit_resources.h"
 | 
| -#include "net/base/mime_util.h"
 | 
| -#include "skia/ext/bitmap_platform_device.h"
 | 
| -#include "testing/gtest/include/gtest/gtest.h"
 | 
| -#include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h"
 | 
| -#include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h"
 | 
| -#include "ui/base/resource/data_pack.h"
 | 
| -#include "ui/gfx/size.h"
 | 
| -#include "webkit/glue/webkit_glue.h"
 | 
| -#include "webkit/glue/webpreferences.h"
 | 
| -#include "webkit/plugins/npapi/plugin_list.h"
 | 
| -#include "webkit/tools/test_shell/mac/test_shell_webview.h"
 | 
| -#include "webkit/tools/test_shell/resource.h"
 | 
| -#include "webkit/tools/test_shell/simple_resource_loader_bridge.h"
 | 
| -#include "webkit/tools/test_shell/test_navigation_controller.h"
 | 
| -#include "webkit/tools/test_shell/test_shell_webkit_init.h"
 | 
| -#include "webkit/tools/test_shell/test_webview_delegate.h"
 | 
| -
 | 
| -#include "third_party/skia/include/core/SkBitmap.h"
 | 
| -
 | 
| -#import "mac/DumpRenderTreePasteboard.h"
 | 
| -
 | 
| -using WebKit::WebWidget;
 | 
| -
 | 
| -#define MAX_LOADSTRING 100
 | 
| -
 | 
| -// Sizes for URL bar layout
 | 
| -#define BUTTON_HEIGHT 22
 | 
| -#define BUTTON_WIDTH 72
 | 
| -#define BUTTON_MARGIN 8
 | 
| -#define URLBAR_HEIGHT  32
 | 
| -
 | 
| -// Global Variables:
 | 
| -
 | 
| -// Content area size for newly created windows.
 | 
| -const int kTestWindowWidth = 800;
 | 
| -const int kTestWindowHeight = 600;
 | 
| -
 | 
| -// The W3C SVG layout tests use a different size than the other layout tests
 | 
| -const int kSVGTestWindowWidth = 480;
 | 
| -const int kSVGTestWindowHeight = 360;
 | 
| -
 | 
| -// Hide the window offscreen when in layout test mode.  Mac OS X limits
 | 
| -// window positions to +/- 16000.
 | 
| -const int kTestWindowXLocation = -14000;
 | 
| -const int kTestWindowYLocation = -14000;
 | 
| -
 | 
| -// Data pack resource. This is a pointer to the mmapped resources file.
 | 
| -static ui::DataPack* g_resource_data_pack = NULL;
 | 
| -
 | 
| -// Define static member variables
 | 
| -base::LazyInstance <std::map<gfx::NativeWindow, TestShell *> >
 | 
| -    TestShell::window_map_ = LAZY_INSTANCE_INITIALIZER;
 | 
| -
 | 
| -// Helper method for getting the path to the test shell resources directory.
 | 
| -base::FilePath GetResourcesFilePath() {
 | 
| -  base::FilePath path;
 | 
| -  // We need to know if we're bundled or not to know which path to use.
 | 
| -  if (base::mac::AmIBundled()) {
 | 
| -    PathService::Get(base::DIR_EXE, &path);
 | 
| -    path = path.Append(base::FilePath::kParentDirectory);
 | 
| -    return path.AppendASCII("Resources");
 | 
| -  } else {
 | 
| -    PathService::Get(base::DIR_SOURCE_ROOT, &path);
 | 
| -    path = path.AppendASCII("webkit");
 | 
| -    path = path.AppendASCII("tools");
 | 
| -    path = path.AppendASCII("test_shell");
 | 
| -    return path.AppendASCII("resources");
 | 
| -  }
 | 
| -}
 | 
| -
 | 
| -// Receives notification that the window is closing so that it can start the
 | 
| -// tear-down process. Is responsible for deleting itself when done.
 | 
| -@interface WindowDelegate : NSObject<NSWindowDelegate> {
 | 
| - @private
 | 
| -  TestShellWebView* m_webView;
 | 
| -}
 | 
| -- (id)initWithWebView:(TestShellWebView*)view;
 | 
| -@end
 | 
| -
 | 
| -@implementation WindowDelegate
 | 
| -
 | 
| -- (id)initWithWebView:(TestShellWebView*)view {
 | 
| -  if ((self = [super init])) {
 | 
| -    m_webView = view;
 | 
| -  }
 | 
| -  return self;
 | 
| -}
 | 
| -
 | 
| -- (void)windowDidBecomeKey:(NSNotification*)notification {
 | 
| -  [m_webView setIsActive:YES];
 | 
| -}
 | 
| -
 | 
| -- (void)windowDidResignKey:(NSNotification*)notification {
 | 
| -  [m_webView setIsActive:NO];
 | 
| -}
 | 
| -
 | 
| -// Called when the window is about to close. Perform the self-destruction
 | 
| -// sequence by getting rid of the shell and removing it and the window from
 | 
| -// the various global lists. Instead of doing it here, however, we fire off
 | 
| -// a delayed call to |-cleanup:| to allow everything to get off the stack
 | 
| -// before we go deleting objects. By returning YES, we allow the window to be
 | 
| -// removed from the screen.
 | 
| -- (BOOL)windowShouldClose:(id)window {
 | 
| -  m_webView = nil;
 | 
| -
 | 
| -  // Try to make the window go away, but it may not when running layout
 | 
| -  // tests due to the quirkyness of autorelease pools and having no main loop.
 | 
| -  [window autorelease];
 | 
| -
 | 
| -  // clean ourselves up and do the work after clearing the stack of anything
 | 
| -  // that might have the shell on it.
 | 
| -  [self performSelectorOnMainThread:@selector(cleanup:)
 | 
| -                         withObject:window
 | 
| -                      waitUntilDone:NO];
 | 
| -
 | 
| -  return YES;
 | 
| -}
 | 
| -
 | 
| -// does the work of removing the window from our various bookkeeping lists
 | 
| -// and gets rid of the shell.
 | 
| -- (void)cleanup:(id)window {
 | 
| -  TestShell::RemoveWindowFromList(window);
 | 
| -  TestShell::DestroyAssociatedShell(window);
 | 
| -
 | 
| -  [self release];
 | 
| -}
 | 
| -
 | 
| -@end
 | 
| -
 | 
| -// Mac-specific stuff to do when the dtor is called. Nothing to do in our
 | 
| -// case.
 | 
| -void TestShell::PlatformCleanUp() {
 | 
| -}
 | 
| -
 | 
| -void TestShell::EnableUIControl(UIControl control, bool is_enabled) {
 | 
| -  // TODO(darin): Implement me.
 | 
| -}
 | 
| -
 | 
| -// static
 | 
| -void TestShell::DestroyAssociatedShell(gfx::NativeWindow handle) {
 | 
| -  WindowMap::iterator it = window_map_.Get().find(handle);
 | 
| -  if (it != window_map_.Get().end()) {
 | 
| -    // Break the view's association with its shell before deleting the shell.
 | 
| -    TestShellWebView* web_view =
 | 
| -      static_cast<TestShellWebView*>(it->second->m_webViewHost->view_handle());
 | 
| -    if ([web_view isKindOfClass:[TestShellWebView class]]) {
 | 
| -      [web_view setShell:NULL];
 | 
| -    }
 | 
| -
 | 
| -    delete it->second;
 | 
| -    window_map_.Get().erase(it);
 | 
| -  } else {
 | 
| -    LOG(ERROR) << "Failed to find shell for window during destroy";
 | 
| -  }
 | 
| -}
 | 
| -
 | 
| -// static
 | 
| -void TestShell::PlatformShutdown() {
 | 
| -  // for each window in the window list, release it and destroy its shell
 | 
| -  for (WindowList::iterator it = TestShell::windowList()->begin();
 | 
| -       it != TestShell::windowList()->end();
 | 
| -       ++it) {
 | 
| -    DestroyAssociatedShell(*it);
 | 
| -    [*it release];
 | 
| -  }
 | 
| -  // assert if we have anything left over, that would be bad.
 | 
| -  DCHECK(window_map_.Get().empty());
 | 
| -
 | 
| -  // Dump the pasteboards we built up.
 | 
| -  [DumpRenderTreePasteboard releaseLocalPasteboards];
 | 
| -}
 | 
| -
 | 
| -// static
 | 
| -void TestShell::InitializeTestShell(bool layout_test_mode,
 | 
| -                                    bool allow_external_pages) {
 | 
| -  // This should move to a per-process platform-specific initialization function
 | 
| -  // when one exists.
 | 
| -
 | 
| -  window_list_ = new WindowList;
 | 
| -  layout_test_mode_ = layout_test_mode;
 | 
| -  allow_external_pages_ = allow_external_pages;
 | 
| -
 | 
| -  web_prefs_ = new WebPreferences;
 | 
| -
 | 
| -  // mmap the data pack which holds strings used by WebCore. This is only
 | 
| -  // a fatal error if we're bundled, which means we might be running layout
 | 
| -  // tests. This is a harmless failure for test_shell_tests.
 | 
| -  g_resource_data_pack = new ui::DataPack(ui::SCALE_FACTOR_100P);
 | 
| -  NSString *resource_path =
 | 
| -      [base::mac::FrameworkBundle() pathForResource:@"test_shell"
 | 
| -                                             ofType:@"pak"];
 | 
| -  base::FilePath resources_pak_path([resource_path fileSystemRepresentation]);
 | 
| -  if (!g_resource_data_pack->LoadFromPath(resources_pak_path)) {
 | 
| -    LOG(FATAL) << "failed to load test_shell.pak";
 | 
| -  }
 | 
| -
 | 
| -  ResetWebPreferences();
 | 
| -
 | 
| -  // Load the Ahem font, which is used by layout tests.
 | 
| -  NSString* ahem_path = [[base::mac::FrameworkBundle() resourcePath]
 | 
| -      stringByAppendingPathComponent:@"AHEM____.TTF"];
 | 
| -  NSURL* ahem_path_url = [NSURL fileURLWithPath:ahem_path];
 | 
| -  CFErrorRef error;
 | 
| -  if (!CTFontManagerRegisterFontsForURL((CFURLRef)ahem_path_url,
 | 
| -                                        kCTFontManagerScopeProcess, &error)) {
 | 
| -    DLOG(FATAL) << "CTFontManagerRegisterFontsForURL "
 | 
| -                << [ahem_path fileSystemRepresentation]
 | 
| -                << [[(NSError*)error description] UTF8String];
 | 
| -  }
 | 
| -
 | 
| -  // Add <app bundle's parent dir>/plugins to the plugin path so we can load
 | 
| -  // test plugins.
 | 
| -  base::FilePath plugins_dir;
 | 
| -  PathService::Get(base::DIR_EXE, &plugins_dir);
 | 
| -  if (base::mac::AmIBundled()) {
 | 
| -    plugins_dir = plugins_dir.AppendASCII("../../../plugins");
 | 
| -  } else {
 | 
| -    plugins_dir = plugins_dir.AppendASCII("plugins");
 | 
| -  }
 | 
| -  webkit::npapi::PluginList::Singleton()->AddExtraPluginDir(plugins_dir);
 | 
| -}
 | 
| -
 | 
| -NSButton* MakeTestButton(NSRect* rect, NSString* title, NSView* parent) {
 | 
| -  NSButton* button = [[[NSButton alloc] initWithFrame:*rect] autorelease];
 | 
| -  [button setTitle:title];
 | 
| -  [button setBezelStyle:NSSmallSquareBezelStyle];
 | 
| -  [button setAutoresizingMask:(NSViewMaxXMargin | NSViewMinYMargin)];
 | 
| -  [parent addSubview:button];
 | 
| -  rect->origin.x += BUTTON_WIDTH;
 | 
| -  return button;
 | 
| -}
 | 
| -
 | 
| -bool TestShell::Initialize(const GURL& starting_url) {
 | 
| -  // Perform application initialization:
 | 
| -  // send message to app controller?  need to work this out
 | 
| -
 | 
| -  // TODO(awalker): this is a straight recreation of windows test_shell.cc's
 | 
| -  // window creation code--we should really pull this from the nib and grab
 | 
| -  // references to the already-created subviews that way.
 | 
| -  NSRect screen_rect = [[NSScreen mainScreen] visibleFrame];
 | 
| -  NSRect window_rect = { {0, screen_rect.size.height - kTestWindowHeight},
 | 
| -                         {kTestWindowWidth, kTestWindowHeight} };
 | 
| -  m_mainWnd = [[NSWindow alloc]
 | 
| -                  initWithContentRect:window_rect
 | 
| -                            styleMask:(NSTitledWindowMask |
 | 
| -                                       NSClosableWindowMask |
 | 
| -                                       NSMiniaturizableWindowMask |
 | 
| -                                       NSResizableWindowMask )
 | 
| -                              backing:NSBackingStoreBuffered
 | 
| -                                defer:NO];
 | 
| -  [m_mainWnd setTitle:@"TestShell"];
 | 
| -
 | 
| -  // Add to our map
 | 
| -  window_map_.Get()[m_mainWnd] = this;
 | 
| -
 | 
| -  // Rely on the window delegate to clean us up rather than immediately
 | 
| -  // releasing when the window gets closed. We use the delegate to do
 | 
| -  // everything from the autorelease pool so the shell isn't on the stack
 | 
| -  // during cleanup (ie, a window close from javascript).
 | 
| -  [m_mainWnd setReleasedWhenClosed:NO];
 | 
| -
 | 
| -  // Create a webview. Note that |web_view| takes ownership of this shell so we
 | 
| -  // will get cleaned up when it gets destroyed.
 | 
| -  m_webViewHost.reset(
 | 
| -      WebViewHost::Create([m_mainWnd contentView],
 | 
| -                          delegate_.get(),
 | 
| -                          0,
 | 
| -                          *TestShell::web_prefs_));
 | 
| -  delegate_->RegisterDragDrop();
 | 
| -  TestShellWebView* web_view =
 | 
| -      static_cast<TestShellWebView*>(m_webViewHost->view_handle());
 | 
| -  [web_view setShell:this];
 | 
| -
 | 
| -  // Create a window delegate to watch for when it's asked to go away. It will
 | 
| -  // clean itself up so we don't need to hold a reference.
 | 
| -  [m_mainWnd setDelegate:[[WindowDelegate alloc] initWithWebView:web_view]];
 | 
| -
 | 
| -  // create buttons
 | 
| -  NSRect button_rect = [[m_mainWnd contentView] bounds];
 | 
| -  button_rect.origin.y = window_rect.size.height - URLBAR_HEIGHT +
 | 
| -      (URLBAR_HEIGHT - BUTTON_HEIGHT) / 2;
 | 
| -  button_rect.size.height = BUTTON_HEIGHT;
 | 
| -  button_rect.origin.x += BUTTON_MARGIN;
 | 
| -  button_rect.size.width = BUTTON_WIDTH;
 | 
| -
 | 
| -  NSView* content = [m_mainWnd contentView];
 | 
| -
 | 
| -  NSButton* button = MakeTestButton(&button_rect, @"Back", content);
 | 
| -  [button setTarget:web_view];
 | 
| -  [button setAction:@selector(goBack:)];
 | 
| -
 | 
| -  button = MakeTestButton(&button_rect, @"Forward", content);
 | 
| -  [button setTarget:web_view];
 | 
| -  [button setAction:@selector(goForward:)];
 | 
| -
 | 
| -  // reload button
 | 
| -  button = MakeTestButton(&button_rect, @"Reload", content);
 | 
| -  [button setTarget:web_view];
 | 
| -  [button setAction:@selector(reload:)];
 | 
| -
 | 
| -  // stop button
 | 
| -  button = MakeTestButton(&button_rect, @"Stop", content);
 | 
| -  [button setTarget:web_view];
 | 
| -  [button setAction:@selector(stopLoading:)];
 | 
| -
 | 
| -  // text field for URL
 | 
| -  button_rect.origin.x += BUTTON_MARGIN;
 | 
| -  button_rect.size.width = [[m_mainWnd contentView] bounds].size.width -
 | 
| -      button_rect.origin.x - BUTTON_MARGIN;
 | 
| -  m_editWnd = [[NSTextField alloc] initWithFrame:button_rect];
 | 
| -  [[m_mainWnd contentView] addSubview:m_editWnd];
 | 
| -  [m_editWnd setAutoresizingMask:(NSViewWidthSizable | NSViewMinYMargin)];
 | 
| -  [m_editWnd setTarget:web_view];
 | 
| -  [m_editWnd setAction:@selector(takeURLStringValueFrom:)];
 | 
| -  [[m_editWnd cell] setWraps:NO];
 | 
| -  [[m_editWnd cell] setScrollable:YES];
 | 
| -
 | 
| -  // show the window
 | 
| -  [m_mainWnd makeKeyAndOrderFront: nil];
 | 
| -
 | 
| -  // Load our initial content.
 | 
| -  if (starting_url.is_valid())
 | 
| -    LoadURL(starting_url);
 | 
| -
 | 
| -  if (IsSVGTestURL(starting_url)) {
 | 
| -    SizeTo(kSVGTestWindowWidth, kSVGTestWindowHeight);
 | 
| -  } else {
 | 
| -    SizeToDefault();
 | 
| -  }
 | 
| -
 | 
| -  return true;
 | 
| -}
 | 
| -
 | 
| -void TestShell::InteractiveSetFocus(WebWidgetHost* host, bool enable) {
 | 
| -  if (enable) {
 | 
| -    [[host->view_handle() window] makeKeyAndOrderFront:nil];
 | 
| -  } else {
 | 
| -    // There is no way to resign key window status in Cocoa.  Fake it by
 | 
| -    // ordering the window out (transferring key status to another window) and
 | 
| -    // then ordering the window back in, but without making it key.
 | 
| -    [[host->view_handle() window] orderOut:nil];
 | 
| -    [[host->view_handle() window] orderFront:nil];
 | 
| -  }
 | 
| -}
 | 
| -
 | 
| -// static
 | 
| -void TestShell::DestroyWindow(gfx::NativeWindow windowHandle) {
 | 
| -  // This code is like -cleanup: on our window delegate.  This call needs to be
 | 
| -  // able to force down a window for tests, so it closes down the window making
 | 
| -  // sure it cleans up the window delegate and the test shells list of windows
 | 
| -  // and map of windows to shells.
 | 
| -
 | 
| -  TestShell::RemoveWindowFromList(windowHandle);
 | 
| -  TestShell::DestroyAssociatedShell(windowHandle);
 | 
| -
 | 
| -  id windowDelegate = [windowHandle delegate];
 | 
| -  DCHECK(windowDelegate);
 | 
| -  [windowHandle setDelegate:nil];
 | 
| -  [windowDelegate release];
 | 
| -
 | 
| -  [windowHandle close];
 | 
| -  [windowHandle autorelease];
 | 
| -}
 | 
| -
 | 
| -WebWidget* TestShell::CreatePopupWidget() {
 | 
| -  DCHECK(!m_popupHost);
 | 
| -  m_popupHost = WebWidgetHost::Create(webViewWnd(), popup_delegate_.get());
 | 
| -
 | 
| -  return m_popupHost->webwidget();
 | 
| -}
 | 
| -
 | 
| -void TestShell::ClosePopup() {
 | 
| -  // PostMessage(popupWnd(), WM_CLOSE, 0, 0);
 | 
| -  m_popupHost = NULL;
 | 
| -}
 | 
| -
 | 
| -void TestShell::SizeTo(int width, int height) {
 | 
| -  // WebViewHost::Create() sets the HTML content rect to start 32 pixels below
 | 
| -  // the top of the window to account for the "toolbar". We need to match that
 | 
| -  // here otherwise the HTML content area will be too short.
 | 
| -  NSRect r = [m_mainWnd contentRectForFrameRect:[m_mainWnd frame]];
 | 
| -  r.size.width = width;
 | 
| -  r.size.height = height + URLBAR_HEIGHT;
 | 
| -  [m_mainWnd setFrame:[m_mainWnd frameRectForContentRect:r] display:YES];
 | 
| -}
 | 
| -
 | 
| -void TestShell::ResizeSubViews() {
 | 
| -  // handled by Cocoa for us
 | 
| -}
 | 
| -
 | 
| -/* static */ void TestShell::DumpAllBackForwardLists(base::string16* result) {
 | 
| -  result->clear();
 | 
| -  for (WindowList::iterator iter = TestShell::windowList()->begin();
 | 
| -       iter != TestShell::windowList()->end(); iter++) {
 | 
| -    NSWindow* window = *iter;
 | 
| -    WindowMap::iterator it = window_map_.Get().find(window);
 | 
| -    if (it != window_map_.Get().end())
 | 
| -      it->second->DumpBackForwardList(result);
 | 
| -    else
 | 
| -      LOG(ERROR) << "Failed to find shell for window during dump";
 | 
| -  }
 | 
| -}
 | 
| -
 | 
| -void TestShell::LoadURLForFrame(const GURL& url,
 | 
| -                                const base::string16& frame_name) {
 | 
| -  if (!url.is_valid())
 | 
| -    return;
 | 
| -
 | 
| -  if (IsSVGTestURL(url)) {
 | 
| -    SizeTo(kSVGTestWindowWidth, kSVGTestWindowHeight);
 | 
| -  } else {
 | 
| -    // only resize back to the default when running tests
 | 
| -    if (layout_test_mode())
 | 
| -      SizeToDefault();
 | 
| -  }
 | 
| -
 | 
| -  navigation_controller_->LoadEntry(
 | 
| -      new TestNavigationEntry(-1, url, frame_name));
 | 
| -}
 | 
| -
 | 
| -bool TestShell::PromptForSaveFile(const wchar_t* prompt_title,
 | 
| -                                  base::FilePath* result)
 | 
| -{
 | 
| -  NSSavePanel* save_panel = [NSSavePanel savePanel];
 | 
| -
 | 
| -  /* set up new attributes */
 | 
| -  [save_panel setAllowedFileTypes:@[@"txt"]];
 | 
| -  [save_panel setMessage:
 | 
| -      [NSString stringWithUTF8String:WideToUTF8(prompt_title).c_str()]];
 | 
| -
 | 
| -  /* display the NSSavePanel */
 | 
| -  [save_panel setDirectoryURL:[NSURL fileURLWithPath:NSHomeDirectory()]];
 | 
| -  [save_panel setNameFieldStringValue:@""];
 | 
| -  if ([save_panel runModal] == NSFileHandlingPanelOKButton) {
 | 
| -    *result = base::FilePath([[[save_panel URL] path] fileSystemRepresentation]);
 | 
| -    return true;
 | 
| -  }
 | 
| -  return false;
 | 
| -}
 | 
| -
 | 
| -// static
 | 
| -std::string TestShell::RewriteLocalUrl(const std::string& url) {
 | 
| -  // Convert file:///tmp/LayoutTests urls to the actual location on disk.
 | 
| -  const char kPrefix[] = "file:///tmp/LayoutTests/";
 | 
| -  const int kPrefixLen = arraysize(kPrefix) - 1;
 | 
| -
 | 
| -  std::string new_url(url);
 | 
| -  if (url.compare(0, kPrefixLen, kPrefix, kPrefixLen) == 0) {
 | 
| -    base::FilePath replace_path;
 | 
| -    PathService::Get(base::DIR_SOURCE_ROOT, &replace_path);
 | 
| -    replace_path = replace_path.Append(
 | 
| -        "third_party/WebKit/LayoutTests/");
 | 
| -    new_url = std::string("file://") + replace_path.value() +
 | 
| -        url.substr(kPrefixLen);
 | 
| -  }
 | 
| -
 | 
| -  return new_url;
 | 
| -}
 | 
| -
 | 
| -// static
 | 
| -void TestShell::ShowStartupDebuggingDialog() {
 | 
| -  NSAlert* alert = [[[NSAlert alloc] init] autorelease];
 | 
| -  alert.messageText = @"Attach to me?";
 | 
| -  alert.informativeText = @"This would probably be a good time to attach your "
 | 
| -      "debugger.";
 | 
| -  [alert addButtonWithTitle:@"OK"];
 | 
| -
 | 
| -  [alert runModal];
 | 
| -}
 | 
| -
 | 
| -base::StringPiece TestShell::ResourceProvider(int key) {
 | 
| -  base::StringPiece res;
 | 
| -  g_resource_data_pack->GetStringPiece(key, &res);
 | 
| -  return res;
 | 
| -}
 | 
| -
 | 
| -//-----------------------------------------------------------------------------
 | 
| -
 | 
| -base::string16 TestShellWebKitInit::GetLocalizedString(int message_id) {
 | 
| -  base::StringPiece res;
 | 
| -  if (!g_resource_data_pack->GetStringPiece(message_id, &res)) {
 | 
| -    LOG(FATAL) << "failed to load webkit string with id " << message_id;
 | 
| -  }
 | 
| -
 | 
| -  // Data packs hold strings as either UTF8 or UTF16.
 | 
| -  base::string16 msg;
 | 
| -  switch (g_resource_data_pack->GetTextEncodingType()) {
 | 
| -  case ui::DataPack::UTF8:
 | 
| -    msg = UTF8ToUTF16(res);
 | 
| -    break;
 | 
| -  case ui::DataPack::UTF16:
 | 
| -    msg = base::string16(reinterpret_cast<const char16*>(res.data()),
 | 
| -                   res.length() / 2);
 | 
| -    break;
 | 
| -  case ui::DataPack::BINARY:
 | 
| -    NOTREACHED();
 | 
| -    break;
 | 
| -  }
 | 
| -
 | 
| -  return msg;
 | 
| -}
 | 
| -
 | 
| -base::StringPiece TestShellWebKitInit::GetDataResource(
 | 
| -    int resource_id,
 | 
| -    ui::ScaleFactor scale_factor) {
 | 
| -  switch (resource_id) {
 | 
| -  case IDR_BROKENIMAGE: {
 | 
| -    // Use webkit's broken image icon (16x16)
 | 
| -    static std::string broken_image_data;
 | 
| -    if (broken_image_data.empty()) {
 | 
| -      base::FilePath path = GetResourcesFilePath();
 | 
| -      // In order to match WebKit's colors for the missing image, we have to
 | 
| -      // use a PNG. The GIF doesn't have the color range needed to correctly
 | 
| -      // match the TIFF they use in Safari.
 | 
| -      path = path.AppendASCII("missingImage.png");
 | 
| -      bool success = file_util::ReadFileToString(path, &broken_image_data);
 | 
| -      if (!success) {
 | 
| -        LOG(FATAL) << "Failed reading: " << path.value();
 | 
| -      }
 | 
| -    }
 | 
| -    return broken_image_data;
 | 
| -  }
 | 
| -  case IDR_TEXTAREA_RESIZER: {
 | 
| -    // Use webkit's text area resizer image.
 | 
| -    static std::string resize_corner_data;
 | 
| -    if (resize_corner_data.empty()) {
 | 
| -      base::FilePath path = GetResourcesFilePath();
 | 
| -      path = path.AppendASCII("textAreaResizeCorner.png");
 | 
| -      bool success = file_util::ReadFileToString(path, &resize_corner_data);
 | 
| -      if (!success) {
 | 
| -        LOG(FATAL) << "Failed reading: " << path.value();
 | 
| -      }
 | 
| -    }
 | 
| -    return resize_corner_data;
 | 
| -  }
 | 
| -
 | 
| -  case IDR_SEARCH_CANCEL:
 | 
| -  case IDR_SEARCH_CANCEL_PRESSED:
 | 
| -  case IDR_SEARCH_MAGNIFIER:
 | 
| -  case IDR_SEARCH_MAGNIFIER_RESULTS:
 | 
| -  case IDR_INPUT_SPEECH:
 | 
| -  case IDR_INPUT_SPEECH_RECORDING:
 | 
| -  case IDR_INPUT_SPEECH_WAITING:
 | 
| -    // TODO(flackr): Pass scale_factor to ResourceProvider.
 | 
| -    return TestShell::ResourceProvider(resource_id);
 | 
| -
 | 
| -  default:
 | 
| -    break;
 | 
| -  }
 | 
| -
 | 
| -  return base::StringPiece();
 | 
| -}
 | 
| -
 | 
| -namespace webkit_glue {
 | 
| -
 | 
| -bool DownloadUrl(const std::string& url, NSWindow* caller_window) {
 | 
| -  return false;
 | 
| -}
 | 
| -
 | 
| -void DidLoadPlugin(const std::string& filename) {
 | 
| -}
 | 
| -
 | 
| -void DidUnloadPlugin(const std::string& filename) {
 | 
| -}
 | 
| -
 | 
| -}  // namespace webkit_glue
 | 
| 
 |