70 lines
2.1 KiB
C++
70 lines
2.1 KiB
C++
// Copyright 2014 The Chromium Authors
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
#include "components/nacl/renderer/progress_event.h"
|
|
|
|
#include "base/functional/bind.h"
|
|
#include "base/location.h"
|
|
#include "components/nacl/renderer/ppb_nacl_private.h"
|
|
#include "content/public/renderer/pepper_plugin_instance.h"
|
|
#include "ppapi/shared_impl/ppapi_globals.h"
|
|
#include "third_party/blink/public/platform/web_string.h"
|
|
#include "third_party/blink/public/web/web_plugin_container.h"
|
|
|
|
using blink::WebString;
|
|
using blink::WebPluginContainer;
|
|
|
|
namespace nacl {
|
|
|
|
namespace {
|
|
const char* EventTypeToName(PP_NaClEventType event_type) {
|
|
switch (event_type) {
|
|
case PP_NACL_EVENT_LOADSTART:
|
|
return "loadstart";
|
|
case PP_NACL_EVENT_PROGRESS:
|
|
return "progress";
|
|
case PP_NACL_EVENT_ERROR:
|
|
return "error";
|
|
case PP_NACL_EVENT_ABORT:
|
|
return "abort";
|
|
case PP_NACL_EVENT_LOAD:
|
|
return "load";
|
|
case PP_NACL_EVENT_LOADEND:
|
|
return "loadend";
|
|
case PP_NACL_EVENT_CRASH:
|
|
return "crash";
|
|
}
|
|
NOTREACHED();
|
|
return "";
|
|
}
|
|
|
|
void DispatchProgressEventOnMainThread(PP_Instance instance,
|
|
const ProgressEvent& event) {
|
|
content::PepperPluginInstance* plugin_instance =
|
|
content::PepperPluginInstance::Get(instance);
|
|
if (!plugin_instance)
|
|
return;
|
|
|
|
WebPluginContainer* container = plugin_instance->GetContainer();
|
|
// It's possible that container() is NULL if the plugin has been removed from
|
|
// the DOM (but the PluginInstance is not destroyed yet).
|
|
if (!container)
|
|
return;
|
|
|
|
container->DispatchProgressEvent(
|
|
WebString::FromUTF8(EventTypeToName(event.event_type)),
|
|
event.length_is_computable, event.loaded_bytes, event.total_bytes,
|
|
WebString::FromUTF8(event.resource_url));
|
|
}
|
|
|
|
} // namespace
|
|
|
|
void DispatchProgressEvent(PP_Instance instance, const ProgressEvent& event) {
|
|
ppapi::PpapiGlobals::Get()->GetMainThreadMessageLoop()->PostTask(
|
|
FROM_HERE,
|
|
base::BindOnce(&DispatchProgressEventOnMainThread, instance, event));
|
|
}
|
|
|
|
} // namespace nacl
|