diff options
author | crogers@google.com <crogers@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-01-22 20:27:06 +0000 |
---|---|---|
committer | crogers@google.com <crogers@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-01-22 20:27:06 +0000 |
commit | 04bce4d05b4bc36a2148878ff86f8eed1bbfea98 (patch) | |
tree | 43f4b733d5de5a69510546af21ac121fe135d6aa /webkit/glue/webkitclient_impl.cc | |
parent | 8df5119e7f38e089337ffc1688f1bcc91c0610de (diff) | |
download | chromium_src-04bce4d05b4bc36a2148878ff86f8eed1bbfea98.zip chromium_src-04bce4d05b4bc36a2148878ff86f8eed1bbfea98.tar.gz chromium_src-04bce4d05b4bc36a2148878ff86f8eed1bbfea98.tar.bz2 |
Re-land http://codereview.chromium.org/6265009 which was reverted to try to fix tree redness
TBR=rniwa
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@72279 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/glue/webkitclient_impl.cc')
-rw-r--r-- | webkit/glue/webkitclient_impl.cc | 68 |
1 files changed, 64 insertions, 4 deletions
diff --git a/webkit/glue/webkitclient_impl.cc b/webkit/glue/webkitclient_impl.cc index c93fdfd..5c2b8b1 100644 --- a/webkit/glue/webkitclient_impl.cc +++ b/webkit/glue/webkitclient_impl.cc @@ -24,6 +24,7 @@ #include "base/synchronization/lock.h" #include "base/time.h" #include "base/utf_string_conversions.h" +#include "grit/webkit_chromium_resources.h" #include "grit/webkit_resources.h" #include "grit/webkit_strings.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebCookie.h" @@ -291,6 +292,59 @@ void WebKitClientImpl::traceEventEnd(const char* name, void* id, TRACE_EVENT_END(name, id, extra); } +namespace { + +WebData loadAudioSpatializationResource(const char* name) { +#ifdef IDR_AUDIO_SPATIALIZATION_T000_P000 + const size_t kExpectedSpatializationNameLength = 31; + if (strlen(name) != kExpectedSpatializationNameLength) { + return WebData(); + } + + // Extract the azimuth and elevation from the resource name. + int azimuth = 0; + int elevation = 0; + int values_parsed = + sscanf(name, "IRC_Composite_C_R0195_T%3d_P%3d", &azimuth, &elevation); + if (values_parsed != 2) { + return WebData(); + } + + // The resource index values go through the elevations first, then azimuths. + const int kAngleSpacing = 15; + + // 0 <= elevation <= 90 (or 315 <= elevation <= 345) + // in increments of 15 degrees. + int elevation_index = + elevation <= 90 ? elevation / kAngleSpacing : + 7 + (elevation - 315) / kAngleSpacing; + bool is_elevation_index_good = 0 <= elevation_index && elevation_index < 10; + + // 0 <= azimuth < 360 in increments of 15 degrees. + int azimuth_index = azimuth / kAngleSpacing; + bool is_azimuth_index_good = 0 <= azimuth_index && azimuth_index < 24; + + const int kNumberOfElevations = 10; + const int kNumberOfAudioResources = 240; + int resource_index = kNumberOfElevations * azimuth_index + elevation_index; + bool is_resource_index_good = 0 <= resource_index && + resource_index < kNumberOfAudioResources; + + if (is_azimuth_index_good && is_elevation_index_good && + is_resource_index_good) { + const int kFirstAudioResourceIndex = IDR_AUDIO_SPATIALIZATION_T000_P000; + base::StringPiece resource = + GetDataResource(kFirstAudioResourceIndex + resource_index); + return WebData(resource.data(), resource.size()); + } +#endif // IDR_AUDIO_SPATIALIZATION_T000_P000 + + NOTREACHED(); + return WebData(); +} + +} // namespace + WebData WebKitClientImpl::loadResource(const char* name) { struct { const char* name; @@ -342,10 +396,16 @@ WebData WebKitClientImpl::loadResource(const char* name) { { "linuxProgressValue", IDR_PROGRESS_VALUE }, #endif }; - for (size_t i = 0; i < ARRAYSIZE_UNSAFE(resources); ++i) { - if (!strcmp(name, resources[i].name)) { - base::StringPiece resource = GetDataResource(resources[i].id); - return WebData(resource.data(), resource.size()); + + // Check the name prefix to see if it's an audio resource. + if (StartsWithASCII(name, "IRC_Composite", true)) { + return loadAudioSpatializationResource(name); + } else { + for (size_t i = 0; i < ARRAYSIZE_UNSAFE(resources); ++i) { + if (!strcmp(name, resources[i].name)) { + base::StringPiece resource = GetDataResource(resources[i].id); + return WebData(resource.data(), resource.size()); + } } } // TODO(jhawkins): Restore this NOTREACHED once WK stops sending in empty |