diff options
author | Ben Murdoch <benm@google.com> | 2011-06-02 12:07:03 +0100 |
---|---|---|
committer | Ben Murdoch <benm@google.com> | 2011-06-10 10:47:21 +0100 |
commit | 2daae5fd11344eaa88a0d92b0f6d65f8d2255c00 (patch) | |
tree | e4964fbd1cb70599f7718ff03e50ea1dab33890b /Source/WebCore/platform/win/LocalizedStringsWin.cpp | |
parent | 87bdf0060a247bfbe668342b87e0874182e0ffa9 (diff) | |
download | external_webkit-2daae5fd11344eaa88a0d92b0f6d65f8d2255c00.zip external_webkit-2daae5fd11344eaa88a0d92b0f6d65f8d2255c00.tar.gz external_webkit-2daae5fd11344eaa88a0d92b0f6d65f8d2255c00.tar.bz2 |
Merge WebKit at r84325: Initial merge by git.
Change-Id: Ic1a909300ecc0a13ddc6b4e784371d2ac6e3d59b
Diffstat (limited to 'Source/WebCore/platform/win/LocalizedStringsWin.cpp')
-rw-r--r-- | Source/WebCore/platform/win/LocalizedStringsWin.cpp | 54 |
1 files changed, 53 insertions, 1 deletions
diff --git a/Source/WebCore/platform/win/LocalizedStringsWin.cpp b/Source/WebCore/platform/win/LocalizedStringsWin.cpp index 67de0fc..c079441 100644 --- a/Source/WebCore/platform/win/LocalizedStringsWin.cpp +++ b/Source/WebCore/platform/win/LocalizedStringsWin.cpp @@ -26,14 +26,66 @@ #include "config.h" #include "LocalizedStrings.h" +#include "WebCoreInstanceHandle.h" +#include <wtf/Assertions.h> +#include <wtf/StdLibExtras.h> +#include <wtf/Threading.h> #include <wtf/text/WTFString.h> +#if USE(CF) +#include <CoreFoundation/CFBundle.h> +#include <wtf/RetainPtr.h> +#endif + namespace WebCore { +#if USE(CF) + +static CFBundleRef createWebKitBundle() +{ + if (CFBundleRef existingBundle = CFBundleGetBundleWithIdentifier(CFSTR("com.apple.WebKit"))) { + CFRetain(existingBundle); + return existingBundle; + } + + wchar_t dllPathBuffer[MAX_PATH]; + DWORD length = ::GetModuleFileNameW(instanceHandle(), dllPathBuffer, WTF_ARRAY_LENGTH(dllPathBuffer)); + ASSERT(length); + ASSERT(length < WTF_ARRAY_LENGTH(dllPathBuffer)); + + RetainPtr<CFStringRef> dllPath(AdoptCF, CFStringCreateWithCharactersNoCopy(0, reinterpret_cast<const UniChar*>(dllPathBuffer), length, kCFAllocatorNull)); + RetainPtr<CFURLRef> dllURL(AdoptCF, CFURLCreateWithFileSystemPath(0, dllPath.get(), kCFURLWindowsPathStyle, false)); + RetainPtr<CFURLRef> dllDirectoryURL(AdoptCF, CFURLCreateCopyDeletingLastPathComponent(0, dllURL.get())); + RetainPtr<CFURLRef> resourcesDirectoryURL(AdoptCF, CFURLCreateCopyAppendingPathComponent(0, dllDirectoryURL.get(), CFSTR("WebKit.resources"), true)); + + return CFBundleCreate(0, resourcesDirectoryURL.get()); +} + +static CFBundleRef webKitBundle() +{ + static CFBundleRef bundle = createWebKitBundle(); + ASSERT(bundle); + return bundle; +} + +#endif // USE(CF) + String localizedString(const char* key) { - // FIXME: <rdar://problem/9119405> Win: WebKit2 needs to be made localizable + ASSERT(isMainThread()); + +#if USE(CF) + static CFStringRef notFound = CFSTR("localized string not found"); + + RetainPtr<CFStringRef> keyString(AdoptCF, CFStringCreateWithCStringNoCopy(NULL, key, kCFStringEncodingUTF8, kCFAllocatorNull)); + RetainPtr<CFStringRef> result(AdoptCF, CFCopyLocalizedStringWithDefaultValue(keyString.get(), 0, webKitBundle(), notFound, 0)); + ASSERT_WITH_MESSAGE(result.get() != notFound, "could not find localizable string %s in bundle", key); + + return result.get(); +#else + // FIXME: Implement localizedString() for !USE(CF). return String::fromUTF8(key, strlen(key)); +#endif } } // namespace WebCore |