Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(553)

Unified Diff: content/browser/renderer_host/pepper_message_filter.cc

Issue 7044012: Support getting the font list in Pepper. This currently only works out of (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/renderer_host/pepper_message_filter.cc
===================================================================
--- content/browser/renderer_host/pepper_message_filter.cc (revision 85766)
+++ content/browser/renderer_host/pepper_message_filter.cc (working copy)
@@ -5,9 +5,12 @@
#include "content/browser/renderer_host/pepper_message_filter.h"
#include "base/basictypes.h"
+#include "base/bind.h"
#include "base/process_util.h"
#include "base/threading/worker_pool.h"
+#include "base/values.h"
#include "content/browser/browser_thread.h"
+#include "content/browser/font_list_async.h"
#include "content/browser/renderer_host/browser_render_process_host.h"
#include "content/browser/resource_context.h"
#include "content/common/pepper_messages.h"
@@ -17,6 +20,7 @@
#include "net/base/host_resolver.h"
#include "net/url_request/url_request_context.h"
#include "ppapi/c/private/ppb_flash_net_connector.h"
+#include "ppapi/proxy/ppapi_messages.h"
#include "webkit/plugins/ppapi/ppb_flash_net_connector_impl.h"
#if defined(ENABLE_FLAPPER_HACKS)
@@ -36,10 +40,17 @@
PepperMessageFilter::PepperMessageFilter(
const content::ResourceContext* resource_context)
- : resource_context_(resource_context) {
+ : resource_context_(resource_context),
+ host_resolver_(NULL) {
DCHECK(resource_context_);
}
+PepperMessageFilter::PepperMessageFilter(net::HostResolver* host_resolver)
+ : resource_context_(NULL),
+ host_resolver_(host_resolver) {
+ DCHECK(host_resolver);
+}
+
PepperMessageFilter::~PepperMessageFilter() {}
bool PepperMessageFilter::OnMessageReceived(const IPC::Message& msg,
@@ -52,6 +63,8 @@
#endif // ENABLE_FLAPPER_HACKS
IPC_MESSAGE_HANDLER(PepperMsg_GetLocalTimeZoneOffset,
OnGetLocalTimeZoneOffset)
+ IPC_MESSAGE_HANDLER_DELAY_REPLY(PpapiHostMsg_PPBFont_GetFontFamilies,
+ OnGetFontFamilies)
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP_EX()
return handled;
@@ -178,7 +191,7 @@
// The lookup request will delete itself on completion.
LookupRequest* lookup_request =
- new LookupRequest(this, resource_context_->host_resolver(),
+ new LookupRequest(this, GetHostResolver(),
routing_id, request_id, request_info);
lookup_request->Start();
}
@@ -295,3 +308,43 @@
base::Time cur = base::Time::FromUTCExploded(exploded);
*result = (adj_time - cur).InSecondsF();
}
+
+void PepperMessageFilter::OnGetFontFamilies(IPC::Message* reply_msg) {
+ content::GetFontListAsync(
+ base::Bind(&PepperMessageFilter::GetFontFamiliesComplete,
+ this, reply_msg));
+}
+
+void PepperMessageFilter::GetFontFamiliesComplete(
+ IPC::Message* reply_msg,
+ scoped_refptr<content::FontListResult> result) {
+ ListValue* input = result->list.get();
+
+ std::string output;
+ for (size_t i = 0; i < input->GetSize(); i++) {
+ ListValue* cur_font;
+ if (!input->GetList(i, &cur_font))
+ continue;
+
+ // Each entry in the list is actually a list of (font name, localized name).
+ // We only care about the regular name.
+ std::string font_name;
+ if (!cur_font->GetString(0, &font_name))
+ continue;
+
+ // Font names are separated with nulls. We also want an explicit null at
+ // the end of the string (Pepper strings aren't null terminated so since
+ // we specify there will be a null, it should actually be in the string).
+ output.append(font_name);
+ output.push_back(0);
+ }
+
+ PpapiHostMsg_PPBFont_GetFontFamilies::WriteReplyParams(reply_msg, output);
+ Send(reply_msg);
+}
+
+net::HostResolver* PepperMessageFilter::GetHostResolver() {
+ if (resource_context_)
+ return resource_context_->host_resolver();
+ return host_resolver_;
+}
« no previous file with comments | « content/browser/renderer_host/pepper_message_filter.h ('k') | content/browser/renderer_host/render_message_filter.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698