[webkit-reviews] review denied: [Bug 24299] V8's NP bindings should be in WebKit : [Attachment 28193] Patch v1

bugzilla-daemon at webkit.org bugzilla-daemon at webkit.org
Tue Mar 3 15:23:44 PST 2009


Darin Fisher (:fishd, Google) <darin at chromium.org> has denied Brett Wilson
(Google) <brettw at chromium.org>'s request for review:
Bug 24299: V8's NP bindings should be in WebKit
https://bugs.webkit.org/show_bug.cgi?id=24299

Attachment 28193: Patch v1
https://bugs.webkit.org/attachment.cgi?id=28193&action=review

------- Additional Comments from Darin Fisher (:fishd, Google)
<darin at chromium.org>
looks good overall.  just a pile of style issues.


>+++ b/WebCore/ChangeLog
...
>+	  * bindings/v8/np_v8object.cpp: Added.
>+	  (AllocV8NPObject):
>+	  (FreeV8NPObject):
>+	  (listFromVariantArgs):
>+	  (NPIdentifierToV8Identifier):

nit: for newly added files, please exclude the methods that they define
in the ChangeLog.


>+++ b/WebCore/bindings/v8/np_v8object.cpp

maybe the file names should be more webkit style?  NPV8Object.cpp?


>@@ -0,0 +1,496 @@
>+/*
>+ * Copyright (C) 2004, 2006 Apple Computer, Inc.  All rights reserved.
>+ * Copyright (C) 2007 Google, Inc.  All rights reserved.

Should this be 2007-2009 Google?


>+#include "v8_custom.h"
>+#include "v8_helpers.h"
>+#include "v8_np_utils.h"
>+#include "v8_proxy.h"

we should probably include the new form of these headers: V8Custom.h,
V8Proxy.h, etc.

i figure the others should be renamed too.


>+	  // Special case the "eval" method.
>+	  if (methodName == NPN_GetStringIdentifier("eval")) {
>+	    if (argCount != 1)
>+		return false;

nit: indentation


>+	  // TODO: fix variable naming

TODO -> FIXME


>+
>+
>+// TODO: Fix it same as NPN_Invoke (HandleScope and such)

nit: only one newline between functions?


>+	  // Convert the result back to an NPVariant.
>+	  ConvertV8ObjectToNPVariant(resultObj, npobj, result);

nit: should be convertV8ObjectToNPVariant.


>+bool NPN_EvaluateHelper(NPP npp, bool popupsAllowed, NPObject* npobj,
NPString* npscript, NPVariant *result)
>+{
>+    VOID_TO_NPVARIANT(*result);
>+    if (!npobj)
>+	  return false;
>+
>+    if (npobj->_class != NPScriptObjectClass)

perhaps this global variable should be named npScriptObjectClass to better
match webkit style?


>+    v8::Handle<v8::Context> context = GetV8Context(npp, npobj);

getV8Context?


>+    WebCore::V8Proxy* proxy = GetV8Proxy(npobj);

getV8Proxy


>+    // TODO(mbelshe) - verify that setting to undefined is right.

TODO -> FIXME


>+	  // TODO(fqian): http://b/issue?id=1210340: Use a v8::Object::Keys()
method
>+	  // when it exists, instead of evaluating javascript.
>+
>+	  // TODO(mpcomplete): figure out how to cache this helper function.

FIXME


>+	  // Run a helper function that collects the properties on the object
into
>+	  // an array.
>+	  const char kEnumeratorCode[] =

enumeratorCode


>+++ b/WebCore/bindings/v8/np_v8object.h

ditto re file naming


>+#include "third_party/npapi/bindings/npruntime.h"

this include path is bad.  webkit convention is to use <bindings/npruntime.h>


>+NPObject* NPN_CreateScriptObject(NPP npp, v8::Handle<v8::Object>,
WebCore::DOMWindow*);
>+NPObject* NPN_CreateNoScriptObject();

may be a bit bad for these to be prefixed by NPN_ since that is the
"namespace" of NPAPI-defined functions.


>+++ b/WebCore/bindings/v8/npruntime.cpp
...
>+#include "config.h"
>+
>+#include <map>
>+#include <set>
>+#include <string>

not supposed to be using STL container classes.


>+#include <v8.h>
>+
>+#include "bindings/npruntime.h"

nit: webkit style is to put the header being implemented as the first header
after the config.h


>+#include "ChromiumBridge.h"
>+#include "np_v8object.h"
>+#include "npruntime_priv.h"
>+#include "v8_npobject.h"
>+
>+#include <wtf/Assertions.h>
>+
>+using namespace v8;
>+
>+
>+// TODO: Consider removing locks if we're singlethreaded already.

FIXME

>+// The static initializer here should work okay, but we want to avoid
>+// static initialization in general.
>+//
>+// Commenting out the locks to avoid dependencies on chrome for now.
>+// Need a platform abstraction which we can use.
>+// static Lock StringIdentifierMapLock;

the comments about locks here is irrelevant and should be deleted.
there is only one webkit thread where this code is ever used.

>+typedef std::map<const StringKey, PrivateIdentifier*> StringIdentifierMap;

convert to HashMap?


>+static StringIdentifierMap* getStringIdentifierMap() {

bracket should be on next line


>+
>+// TODO: Consider removing locks if we're singlethreaded already.
>+// static Lock IntIdentifierMapLock;

ditto for removing this bogus lock talk.


>+typedef std::map<int, PrivateIdentifier*> IntIdentifierMap;

HashMap?


>+	  // AutoLock safeLock(StringIdentifierMapLock);

delete


>+void NPN_GetStringIdentifiers(const NPUTF8** names, int32_t nameCount,
>+				NPIdentifier* identifiers) {
>+    ASSERT(names);
>+    ASSERT(identifiers);
>+
>+    if (names && identifiers)
>+	  for (int i = 0; i < nameCount; i++)
>+	      identifiers[i] = NPN_GetStringIdentifier(names[i]);

webkit style guide says to use {}'s when the body of an "if" takes more
than one line.


>+    // AutoLock safeLock(IntIdentifierMapLock);

delete all of these


>+bool NPN_IdentifierIsString(NPIdentifier identifier) {
>+NPUTF8 *NPN_UTF8FromIdentifier(NPIdentifier identifier) {
>+int32_t NPN_IntFromIdentifier(NPIdentifier identifier) {

bracket on next line.


>+static const char* kCounterNPObjects = "NPObjects";

counterNPObjects


>+// The registry is designed for quick lookup of NPObjects.
>+// JS needs to be able to quickly lookup a given NPObject to determine
>+// if it is alive or not.
>+// The browser needs to be able to quickly lookup all NPObjects which are
>+// "owned" by an object.
>+//
>+// The g_live_objects is a hash table of all live objects to their owner
>+// objects.  Presence in this table is used primarily to determine if
>+// objects are live or not.
>+//
>+// The g_root_objects is a hash table of root objects to a set of
>+// objects that should be deactivated in sync with the root.	A
>+// root is defined as a top-level owner object.  This is used on
>+// Frame teardown to deactivate all objects associated
>+// with a particular plugin.
>+
>+typedef std::set<NPObject*> NPObjectSet;
>+typedef std::map<NPObject*, NPObject*> NPObjectMap;
>+typedef std::map<NPObject*, NPObjectSet*> NPRootObjectMap;

can these use HashSet and HashMap?


>+// A map of live NPObjects with pointers to their Roots.
>+NPObjectMap g_live_objects;

liveObjects


>+
>+// A map of the root objects and the list of NPObjects
>+// associated with that object.
>+NPRootObjectMap g_root_objects;

rootObjects


>+	if (parent) {
>+	  owner = parent;
>+	}
>+	ASSERT(g_root_objects.find(obj) == g_root_objects.end());
>+	if (g_root_objects.find(owner) != g_root_objects.end())
>+	  (g_root_objects[owner])->insert(obj);
>+    }

indentation


>+void _NPN_UnregisterObject(NPObject* obj) {
...
>+    if (g_live_objects.find(obj) != g_live_objects.end())
>+	owner = g_live_objects.find(obj)->second;

indentation


>+	      // Remove the JS references to the object.
>+	      ForgetV8ObjectForNPObject(sub_object);

forgetV8ObjectForNPObject


>+++ b/WebCore/bindings/v8/npruntime_priv.h

shouldn't the copyright notice in this file mention google?


...
>+#include "third_party/npapi/bindings/npruntime.h"

bindings/npruntime.h


>+++ b/WebCore/bindings/v8/v8_np_utils.cpp
>@@ -0,0 +1,124 @@
>+// Copyright (c) 2008, Google Inc.

and 2009?

>+#include "DOMWindow.h"
>+#include "Frame.h"
>+#include "PlatformString.h"
>+#undef LOG

is this #undef really necessary?  maybe it is left over cruft?


>+#include "npruntime_priv.h"
>+#include "np_v8object.h"
>+#include "v8_npobject.h"
>+#include "v8_proxy.h"

#include "V8Proxy.h"



>+	  char* utf8_chars = strdup(*utf8);

utf8Chars


>+// Helper function to create an NPN String Identifier from a v8 string.
>+NPIdentifier GetStringIdentifier(v8::Handle<v8::String> str)

getStringIdentifier


>+{
>+    const int kStackBufSize = 100;

stackBufSize


>+++ b/WebCore/bindings/v8/v8_np_utils.h

>+#include "third_party/npapi/bindings/npruntime.h"

bindings/npruntime.h


More information about the webkit-reviews mailing list