summaryrefslogtreecommitdiffstats
path: root/webkit/glue/webkitclient_impl.cc
diff options
context:
space:
mode:
authorcrogers@google.com <crogers@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-01-22 20:27:06 +0000
committercrogers@google.com <crogers@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-01-22 20:27:06 +0000
commit04bce4d05b4bc36a2148878ff86f8eed1bbfea98 (patch)
tree43f4b733d5de5a69510546af21ac121fe135d6aa /webkit/glue/webkitclient_impl.cc
parent8df5119e7f38e089337ffc1688f1bcc91c0610de (diff)
downloadchromium_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.cc68
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