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

Unified Diff: webkit/activex_shim/dispatch_object.cc

Issue 200031: Take out the activex control. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 3 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
« no previous file with comments | « webkit/activex_shim/dispatch_object.h ('k') | webkit/activex_shim/ihtmldocument_impl.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webkit/activex_shim/dispatch_object.cc
===================================================================
--- webkit/activex_shim/dispatch_object.cc (revision 25626)
+++ webkit/activex_shim/dispatch_object.cc (working copy)
@@ -1,290 +0,0 @@
-// Copyright (c) 2006-2008 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 "webkit/activex_shim/dispatch_object.h"
-
-#include <algorithm>
-#include <string>
-#include <vector>
-
-#include "base/logging.h"
-#include "webkit/activex_shim/activex_util.h"
-#include "webkit/activex_shim/npp_impl.h"
-
-using std::string;
-using std::wstring;
-
-namespace activex_shim {
-
-// Used when the browser asks for scriptable object.
-static NPClass npclass = {
- 1, // NP_CLASS_STRUCT_VERSION,
- NPAllocate,
- NPDeallocate,
- NPInvalidate,
- NPHasMethod,
- NPInvoke,
- NPInvokeDefault,
- NPHasProperty,
- NPGetProperty,
- NPSetProperty,
- NPRemoveProperty
-};
-
-DispatchObject::DispatchObject(DispatchObject* root)
- : npobject_(NULL),
- root_(root),
- deleting_spawned_children_(false) {
-}
-
-DispatchObject::~DispatchObject() {
- if (npobject_) {
- // We are gone, but the NPObject may still be there. So remove
- // the reference to myself to avoid future trouble.
- npobject_->dispatch_object = NULL;
- }
-}
-
-NPObject* DispatchObject::GetScriptableNPObject() {
- if (npobject_ == NULL) {
- npobject_ = static_cast<DispatchNPObject*>(NPAllocate(&npclass));
- } else {
- // If it is requesting the object again, we should just return the
- // object with increased reference count.
- g_browser->retainobject(npobject_);
- }
- return npobject_;
-}
-
-NPObject* DispatchObject::NPAllocate(NPClass* cls) {
- DispatchNPObject* obj = new DispatchNPObject();
- obj->_class = cls;
- obj->referenceCount = 1;
- obj->dispatch_object = this;
- return obj;
-}
-
-void DispatchObject::NPInvalidate() {
-}
-
-void DispatchObject::OnDeallocateObject(DispatchNPObject* obj) {
- DCHECK_EQ(obj, npobject_);
- if (obj == npobject_) {
- // Just null our reference so that we won't accidentally access it
- // during destruction.
- npobject_ = NULL;
- if (NPObjectOwnsMe()) {
- delete this;
- }
- }
-}
-
-bool DispatchObject::NPHasMethod(NPIdentifier name) {
- wstring wname;
- if (!NPIdentifierToWString(name, &wname))
- return false;
- return DispIsMethodOrProperty(GetDispatch(), wname.c_str(), true);
-}
-
-bool DispatchObject::NPHasProperty(NPIdentifier name) {
- wstring wname;
- if (!NPIdentifierToWString(name, &wname))
- return false;
- return DispIsMethodOrProperty(GetDispatch(), wname.c_str(), false);
- // Here is another way. But the problem is it can not distiguish between
- // method and property.
- // DISPID dispid;
- // if (GetDispID(npobj->dispatch_object->GetDispatch(), wname.c_str(), &dispid))
- // return true;
-}
-
-bool DispatchObject::NPInvoke(NPIdentifier name, const NPVariant* args,
- uint32_t argCount, NPVariant* result) {
- wstring wname;
- if (!NPIdentifierToWString(name, &wname))
- return false;
- std::vector<ScopedVariant> vars;
- ScopedVariant vtres;
- bool res = false;
- do {
- if (argCount > 0) {
- vars.resize(argCount);
- unsigned int i;
- for (i = 0; i < argCount; i++) {
- // Note that we need to reverse the order of arguments for
- // IDispatch::Invoke.
- if (!NPVariantToVariant(&args[argCount - i - 1], &vars[i]))
- break;
- }
- if (i < argCount)
- break;
- }
- if (!DispInvoke(GetDispatch(), wname.c_str(),
- argCount > 0 ? &vars[0] : NULL,
- argCount, &vtres))
- break;
- if (!VariantToNPVariant(this, &vtres, result))
- break;
- res = true;
- } while (false);
- return res;
-}
-
-bool DispatchObject::NPInvokeDefault(const NPVariant* args, uint32_t argCount,
- NPVariant* result) {
- return false;
-}
-
-bool DispatchObject::NPGetProperty(NPIdentifier name, NPVariant* variant) {
- wstring wname;
- if (!NPIdentifierToWString(name, &wname))
- return false;
- ScopedVariant result;
- if (!DispInvoke(GetDispatch(), wname.c_str(), NULL, 0, &result))
- return false;
- if (!VariantToNPVariant(this, &result, variant))
- return false;
- return true;
-}
-
-bool DispatchObject::NPSetProperty(NPIdentifier name, const NPVariant* variant) {
- wstring wname;
- if (!NPIdentifierToWString(name, &wname))
- return false;
- ScopedVariant rvalue;
- if (!NPVariantToVariant(variant, &rvalue))
- return false;
- if (!DispSetProperty(GetDispatch(), wname.c_str(), rvalue))
- return false;
- return true;
-}
-
-bool DispatchObject::NPRemoveProperty(NPIdentifier propertyName) {
- return false;
-}
-
-void DispatchObject::AddSpawned(DispatchObject* obj) {
- // I myself must be the root.
- DCHECK(root_ == NULL);
- spawned_children_.push_back(obj);
-}
-
-void DispatchObject::RemoveSpawned(DispatchObject* obj) {
- // This is to avoid problem when the root object is calling ReleaseSpawned to
- // delete all spawned children.
- if (deleting_spawned_children_)
- return;
- DCHECK(root_ == NULL);
- SpawnedChildrenList::iterator it = std::find(spawned_children_.begin(),
- spawned_children_.end(), obj);
- if (it == spawned_children_.end()) {
- DCHECK(false);
- return;
- }
- spawned_children_.erase(it);
-}
-
-void DispatchObject::ReleaseSpawned() {
- DCHECK(root_ == NULL);
- deleting_spawned_children_ = true;
- for (SpawnedChildrenList::iterator it = spawned_children_.begin();
- it != spawned_children_.end(); ++it)
- delete *it;
- deleting_spawned_children_ = false;
- spawned_children_.clear();
-}
-
-SpawnedDispatchObject::SpawnedDispatchObject(IDispatch* dispatch,
- DispatchObject* root)
- : DispatchObject(root),
- dispatch_(dispatch) {
- if (dispatch)
- dispatch->AddRef();
- DCHECK(root != NULL);
- root->AddSpawned(this);
-}
-
-SpawnedDispatchObject::~SpawnedDispatchObject() {
- if (dispatch_)
- dispatch_->Release();
- DCHECK(root_ != NULL);
- root_->RemoveSpawned(this);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-// Scripting object functions implementation.
-
-NPObject* NPAllocate(NPP npp, NPClass* theClass) {
- DispatchObject* dispatch_object = static_cast<DispatchObject*>(npp->pdata);
- return dispatch_object->NPAllocate(theClass);
-}
-
-void NPDeallocate(NPObject* obj) {
- DispatchNPObject* npobj = static_cast<DispatchNPObject*>(obj);
- // The dispatch_object could be well gone before the NPObject is released.
- if (npobj->dispatch_object != NULL) {
- npobj->dispatch_object->OnDeallocateObject(npobj);
- }
- delete npobj;
-}
-
-void NPInvalidate(NPObject* obj) {
- DispatchNPObject* npobj = static_cast<DispatchNPObject*>(obj);
- if (npobj->dispatch_object == NULL)
- return;
- npobj->dispatch_object->NPInvalidate();
-}
-
-bool NPHasMethod(NPObject* obj, NPIdentifier name) {
- DispatchNPObject* npobj = static_cast<DispatchNPObject*>(obj);
- if (npobj->dispatch_object == NULL)
- return false;
- return npobj->dispatch_object->NPHasMethod(name);
-}
-
-bool NPInvoke(NPObject* obj, NPIdentifier name, const NPVariant* args,
- uint32_t argCount, NPVariant* result) {
- DispatchNPObject* npobj = static_cast<DispatchNPObject*>(obj);
- if (npobj->dispatch_object == NULL)
- return false;
- return npobj->dispatch_object->NPInvoke(name, args, argCount, result);
-}
-
-bool NPInvokeDefault(NPObject* obj, const NPVariant* args, uint32_t argCount,
- NPVariant* result) {
- DispatchNPObject* npobj = static_cast<DispatchNPObject*>(obj);
- if (npobj->dispatch_object == NULL)
- return false;
- return npobj->dispatch_object->NPInvokeDefault(args, argCount, result);
-}
-
-bool NPHasProperty(NPObject* obj, NPIdentifier name) {
- DispatchNPObject* npobj = static_cast<DispatchNPObject*>(obj);
- if (npobj->dispatch_object == NULL)
- return false;
- return npobj->dispatch_object->NPHasProperty(name);
-}
-
-bool NPGetProperty(NPObject* obj, NPIdentifier name, NPVariant* variant) {
- DispatchNPObject* npobj = static_cast<DispatchNPObject*>(obj);
- if (npobj->dispatch_object == NULL)
- return false;
- return npobj->dispatch_object->NPGetProperty(name, variant);
-}
-
-bool NPSetProperty(NPObject* obj, NPIdentifier name, const NPVariant* variant) {
- DispatchNPObject* npobj = static_cast<DispatchNPObject*>(obj);
- if (npobj->dispatch_object == NULL)
- return false;
- return npobj->dispatch_object->NPSetProperty(name, variant);
-}
-
-bool NPRemoveProperty(NPObject* obj, NPIdentifier name) {
- DispatchNPObject* npobj = static_cast<DispatchNPObject*>(obj);
- if (npobj->dispatch_object == NULL)
- return false;
- return npobj->dispatch_object->NPRemoveProperty(name);
-}
-
-} // namespace activex_shim
« no previous file with comments | « webkit/activex_shim/dispatch_object.h ('k') | webkit/activex_shim/ihtmldocument_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698