blob: 0da5f30d4dc4052e06607e8de6a26c5325b9ca4e [file] [log] [blame]
// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/default_plugin/plugin_impl_gtk.h"
#include <X11/Xdefs.h>
#include <gtk/gtk.h>
#include "base/file_util.h"
#include "base/path_service.h"
#include "base/string_util.h"
#include "chrome/common/chrome_plugin_messages.h"
#include "chrome/default_plugin/plugin_main.h"
#include "content/common/child_thread.h"
#include "content/public/common/content_constants.h"
#include "googleurl/src/gurl.h"
#include "grit/webkit_strings.h"
#include "unicode/locid.h"
#include "webkit/plugins/npapi/default_plugin_shared.h"
// TODO(thakis): Most methods in this class are stubbed out an need to be
// implemented.
PluginInstallerImpl::PluginInstallerImpl(int16 mode)
: instance_(NULL),
plugin_install_stream_(NULL),
plugin_installer_state_(PluginInstallerStateUndefined),
container_(NULL) {
}
PluginInstallerImpl::~PluginInstallerImpl() {
if (container_)
gtk_widget_destroy(container_);
}
bool PluginInstallerImpl::Initialize(void* module_handle, NPP instance,
NPMIMEType mime_type, int16 argc,
char* argn[], char* argv[]) {
DVLOG(1) << __FUNCTION__ << " MIME Type : " << mime_type;
DCHECK(instance != NULL);
if (mime_type == NULL || strlen(mime_type) == 0) {
DLOG(WARNING) << __FUNCTION__ << " Invalid parameters passed in";
NOTREACHED();
return false;
}
instance_ = instance;
mime_type_ = mime_type;
PluginInstallerBase::SetRoutingIds(argc, argn, argv);
return true;
}
bool PluginInstallerImpl::NPP_SetWindow(NPWindow* window_info) {
if (container_)
gtk_widget_destroy(container_);
container_ = gtk_plug_new(reinterpret_cast<XID>(window_info->window));
// Add label.
GtkWidget* box = gtk_vbox_new(FALSE, 0);
GtkWidget* label = gtk_label_new("Missing Plug-in");
gtk_box_pack_start(GTK_BOX(box), label, TRUE, TRUE, 0);
gtk_container_add(GTK_CONTAINER(container_), box);
gtk_widget_show_all(container_);
return true;
}
void PluginInstallerImpl::Shutdown() {
}
void PluginInstallerImpl::NewStream(NPStream* stream) {
plugin_install_stream_ = stream;
}
void PluginInstallerImpl::DestroyStream(NPStream* stream, NPError reason) {
if (stream == plugin_install_stream_)
plugin_install_stream_ = NULL;
}
bool PluginInstallerImpl::WriteReady(NPStream* stream) {
bool ready_to_accept_data = false;
return ready_to_accept_data;
}
int32 PluginInstallerImpl::Write(NPStream* stream, int32 offset,
int32 buffer_length, void* buffer) {
return true;
}
void PluginInstallerImpl::ClearDisplay() {
}
void PluginInstallerImpl::RefreshDisplay() {
}
bool PluginInstallerImpl::CreateToolTip() {
return true;
}
void PluginInstallerImpl::UpdateToolTip() {
}
void PluginInstallerImpl::DisplayAvailablePluginStatus() {
}
void PluginInstallerImpl::DisplayStatus(int message_resource_id) {
}
void PluginInstallerImpl::DisplayPluginDownloadFailedStatus() {
}
void PluginInstallerImpl::URLNotify(const char* url, NPReason reason) {
}
int16 PluginInstallerImpl::NPP_HandleEvent(void* event) {
return 0;
}
std::wstring PluginInstallerImpl::ReplaceStringForPossibleEmptyReplacement(
int message_id_with_placeholders,
int messsage_id_without_placeholders,
const std::wstring& replacement_string) {
return L"";
}
void PluginInstallerImpl::DownloadPlugin() {
}
void PluginInstallerImpl::DownloadCancelled() {
DisplayAvailablePluginStatus();
}
void PluginInstallerImpl::ShowInstallDialog() {
}
void PluginInstallerImpl::NotifyPluginStatus(int status) {
ChildThread::current()->Send(
new ChromePluginProcessHostMsg_MissingPluginStatus(
status,
renderer_process_id(),
render_view_id(),
0));
}