xref: /aosp_15_r20/external/cronet/components/nacl/renderer/progress_event.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker // Copyright 2014 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker 
5*6777b538SAndroid Build Coastguard Worker #include "components/nacl/renderer/progress_event.h"
6*6777b538SAndroid Build Coastguard Worker 
7*6777b538SAndroid Build Coastguard Worker #include "base/functional/bind.h"
8*6777b538SAndroid Build Coastguard Worker #include "base/location.h"
9*6777b538SAndroid Build Coastguard Worker #include "components/nacl/renderer/ppb_nacl_private.h"
10*6777b538SAndroid Build Coastguard Worker #include "content/public/renderer/pepper_plugin_instance.h"
11*6777b538SAndroid Build Coastguard Worker #include "ppapi/shared_impl/ppapi_globals.h"
12*6777b538SAndroid Build Coastguard Worker #include "third_party/blink/public/platform/web_string.h"
13*6777b538SAndroid Build Coastguard Worker #include "third_party/blink/public/web/web_plugin_container.h"
14*6777b538SAndroid Build Coastguard Worker 
15*6777b538SAndroid Build Coastguard Worker using blink::WebString;
16*6777b538SAndroid Build Coastguard Worker using blink::WebPluginContainer;
17*6777b538SAndroid Build Coastguard Worker 
18*6777b538SAndroid Build Coastguard Worker namespace nacl {
19*6777b538SAndroid Build Coastguard Worker 
20*6777b538SAndroid Build Coastguard Worker namespace {
EventTypeToName(PP_NaClEventType event_type)21*6777b538SAndroid Build Coastguard Worker const char* EventTypeToName(PP_NaClEventType event_type) {
22*6777b538SAndroid Build Coastguard Worker   switch (event_type) {
23*6777b538SAndroid Build Coastguard Worker     case PP_NACL_EVENT_LOADSTART:
24*6777b538SAndroid Build Coastguard Worker       return "loadstart";
25*6777b538SAndroid Build Coastguard Worker     case PP_NACL_EVENT_PROGRESS:
26*6777b538SAndroid Build Coastguard Worker       return "progress";
27*6777b538SAndroid Build Coastguard Worker     case PP_NACL_EVENT_ERROR:
28*6777b538SAndroid Build Coastguard Worker       return "error";
29*6777b538SAndroid Build Coastguard Worker     case PP_NACL_EVENT_ABORT:
30*6777b538SAndroid Build Coastguard Worker       return "abort";
31*6777b538SAndroid Build Coastguard Worker     case PP_NACL_EVENT_LOAD:
32*6777b538SAndroid Build Coastguard Worker       return "load";
33*6777b538SAndroid Build Coastguard Worker     case PP_NACL_EVENT_LOADEND:
34*6777b538SAndroid Build Coastguard Worker       return "loadend";
35*6777b538SAndroid Build Coastguard Worker     case PP_NACL_EVENT_CRASH:
36*6777b538SAndroid Build Coastguard Worker       return "crash";
37*6777b538SAndroid Build Coastguard Worker   }
38*6777b538SAndroid Build Coastguard Worker   NOTREACHED();
39*6777b538SAndroid Build Coastguard Worker   return "";
40*6777b538SAndroid Build Coastguard Worker }
41*6777b538SAndroid Build Coastguard Worker 
DispatchProgressEventOnMainThread(PP_Instance instance,const ProgressEvent & event)42*6777b538SAndroid Build Coastguard Worker void DispatchProgressEventOnMainThread(PP_Instance instance,
43*6777b538SAndroid Build Coastguard Worker                                        const ProgressEvent& event) {
44*6777b538SAndroid Build Coastguard Worker   content::PepperPluginInstance* plugin_instance =
45*6777b538SAndroid Build Coastguard Worker       content::PepperPluginInstance::Get(instance);
46*6777b538SAndroid Build Coastguard Worker   if (!plugin_instance)
47*6777b538SAndroid Build Coastguard Worker     return;
48*6777b538SAndroid Build Coastguard Worker 
49*6777b538SAndroid Build Coastguard Worker   WebPluginContainer* container = plugin_instance->GetContainer();
50*6777b538SAndroid Build Coastguard Worker   // It's possible that container() is NULL if the plugin has been removed from
51*6777b538SAndroid Build Coastguard Worker   // the DOM (but the PluginInstance is not destroyed yet).
52*6777b538SAndroid Build Coastguard Worker   if (!container)
53*6777b538SAndroid Build Coastguard Worker     return;
54*6777b538SAndroid Build Coastguard Worker 
55*6777b538SAndroid Build Coastguard Worker   container->DispatchProgressEvent(
56*6777b538SAndroid Build Coastguard Worker       WebString::FromUTF8(EventTypeToName(event.event_type)),
57*6777b538SAndroid Build Coastguard Worker       event.length_is_computable, event.loaded_bytes, event.total_bytes,
58*6777b538SAndroid Build Coastguard Worker       WebString::FromUTF8(event.resource_url));
59*6777b538SAndroid Build Coastguard Worker }
60*6777b538SAndroid Build Coastguard Worker 
61*6777b538SAndroid Build Coastguard Worker }  // namespace
62*6777b538SAndroid Build Coastguard Worker 
DispatchProgressEvent(PP_Instance instance,const ProgressEvent & event)63*6777b538SAndroid Build Coastguard Worker void DispatchProgressEvent(PP_Instance instance, const ProgressEvent& event) {
64*6777b538SAndroid Build Coastguard Worker   ppapi::PpapiGlobals::Get()->GetMainThreadMessageLoop()->PostTask(
65*6777b538SAndroid Build Coastguard Worker       FROM_HERE,
66*6777b538SAndroid Build Coastguard Worker       base::BindOnce(&DispatchProgressEventOnMainThread, instance, event));
67*6777b538SAndroid Build Coastguard Worker }
68*6777b538SAndroid Build Coastguard Worker 
69*6777b538SAndroid Build Coastguard Worker }  // namespace nacl
70