bfergerson / journey Goto Github PK
View Code? Open in Web Editor NEWJCEF-powered cross-platform web browser
License: Apache License 2.0
JCEF-powered cross-platform web browser
License: Apache License 2.0
Using a 32-bit Java on 64-bit Windows results results in an dll link crash.
JourneyLoader.java only detects if the system is 64-bit. It should detect if both the system & Java Runtime is 64-bit.
Should be able to set via ENV variable or programmatically
Appears to be the same issue as: https://magpcss.org/ceforum/viewtopic.php?f=17&t=16688&sid=085d61dd2bbe5508e5f30d88de021603
Need to hook in this negative zoom to apply automatically until it's fixed.
i think there's a quite simple reason why this JCEF binary as called as Journey library 3 years ago stopped?
Is it the size / what the reason for the developer stopping them?
is that because of the simplicity of jxbrowser or something else?
CMiiw i miss the cutting edge but open source without any limitation (license matters)
Hello , first of all congratulations for your attempt , secondly very happy that found this repository today.
Is it supporting JavaFX or only Swing ?
I will be very glad to contribute on the Windows Development side . I have solid experience with JxBrowser and Java generally.
#I am using v3.0.0, it's work in IDE, but have an error while running in single jar (fat) file with dependencies.
OS. Linux ubuntu 18.04 LTS
jdk 1.8
I think the error cause of missing in the loading of .so file.
====== Error ===========
java -jar my-project-name-jar-with-dependencies.jar
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.codebrig.journey.JourneyLoader (file:/home/khalegh/Downloads/8/projectJavaChromeBrowserJavaEight/WEB/target/my-project-name-jar-with-dependencies.jar) to field java.lang.ClassLoader.sys_paths
WARNING: Please consider reporting this to the maintainers of com.codebrig.journey.JourneyLoader
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
Exception in thread "main" java.lang.ExceptionInInitializerError
at net.khalegh.ShowBrowserDemo.main(ShowBrowserDemo.java:12)
Caused by: java.lang.RuntimeException: java.lang.NullPointerException
at com.codebrig.journey.JourneyLoader.setup(JourneyLoader.java:204)
at com.codebrig.journey.JourneyBrowserView.(JourneyBrowserView.java:33)
... 1 more
Caused by: java.lang.NullPointerException
at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2646)
at java.base/java.lang.Runtime.loadLibrary0(Runtime.java:830)
at java.base/java.lang.System.loadLibrary(System.java:1873)
at com.codebrig.journey.JourneyLoader.loadLinux(JourneyLoader.java:338)
at com.codebrig.journey.JourneyLoader.setup(JourneyLoader.java:173)
... 2 more
how to set http proxy and https proxy in journey
Hello,
I'm interested to give help on some tag but couldn't get 'com.github.bfergerson:joor:bef9254b2a' to resolve. What's the config to do ?
Not able to run the JourneyBrowser sample program :
cd /home/vikas/NetBeansProjects/mavenproject3; JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-0.fc31.x86_64 /home/vikas/Documents/DEVTools/incubating-netbeans-11.0-bin/netbeans/java/maven/bin/mvn "-Dexec.args=-classpath %classpath JourneyBrowser" -Dexec.executable=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-0.fc31.x86_64/bin/java org.codehaus.mojo:exec-maven-plugin:1.5.0:exec
Running NetBeans Compile On Save execution. Phase execution is skipped and output directories of dependency projects (with Compile on Save turned on) will be used instead of their jar artifacts.
Scanning for projects...
Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.5.0:exec (default-cli) on project mavenproject3: Command execution failed. Process exited with an error: 1 (Exit value: 1) -> [Help 1]
To see the full stack trace of the errors, re-run Maven with the -e switch.
Re-run Maven using the -X switch to enable full debug logging.
For more information about the errors and possible solutions, please read the following articles:
[Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
So https://github.com/CodeBrig/Journey
is only hardcoded in one place
Hello, I'm trying to use Journey on MacOS, but when I start the browser I get this:
WARNING: Illegal reflective access by com.codebrig.journey.JourneyLoader (file:/Users/wilkerlucio/.m2/repository/com/github/codebrig/journey/0.4.0-offline/journey-0.4.0-offline.jar) to field java.lang.ClassLoader.sys_paths
WARNING: Please consider reporting this to the maintainers of com.codebrig.journey.JourneyLoader
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
Exception in thread "JavaFX Application Thread" java.lang.ExceptionInInitializerError```
I put frame.setUndecorated(true); which I just do not want any default windows control like "一口X".
Then a white screen displayed. :(
Do not know why this happend and how to hide those default buttons?
Thanks
Version: 0.3.3-online
JDK version: jdk1.8.0_231
Os and IDE of development: Win10 x64, Intelij IDEA
I want to load url, set user agent and set some simple listeners to cef.
But the simple code like :
JourneyBrowserView browser = new JourneyBrowserView ();
browser.getCefBrowser ().loadURL ("https://www.google.com");
Does nothing.
SwingUtilities.invokeLater (() ->
{
browser.getCefBrowser ().loadURL ("https://www.google.com");
});
Doesn't work too.
But this code works:
JourneyBrowserView browser = new JourneyBrowserView ("https://www.google.com");
So, is it my blame or ...7
Hello!
Can I find out how to disable the display of the context menu (right click)?
Opened discussion: https://magpcss.org/ceforum/viewtopic.php?f=17&t=16791&sid=555687dcd0366db372166c0e2594e566
May need to create an issue now.
Is this currently planned functionality?
is CefMessageRouter the ideal?
Hi,
There is a plan to support also 32 bit os like rasbian for raspberry pi 3?
Thank you
JDK 1.8.0_181|JDK 14
0.4.0-online|0.4.0-offline
Initializing code:
val browser = JourneyBrowserView("https://web.whatsapp.com")
val frame = JFrame()
frame.contentPane.add(browser, BorderLayout.CENTER)
frame.defaultCloseOperation = WindowConstants.DO_NOTHING_ON_CLOSE
frame.addWindowListener(object : WindowAdapter() {
override fun windowClosing(e: WindowEvent?) {
browser.cefApp.dispose()
frame.dispose()
}
})
frame.title = "Войдите в свой WhatsApp аккаунт"
frame.setSize(1000, 600)
frame.setVisible(true)
stacktrace:
Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1774)
at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1657)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
at javafx.event.Event.fireEvent(Event.java:198)
at javafx.scene.Node.fireEvent(Node.java:8411)
at javafx.scene.control.Button.fire(Button.java:185)
at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:182)
at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:96)
at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:89)
at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
at javafx.event.Event.fireEvent(Event.java:198)
at javafx.scene.Scene$MouseHandler.process(Scene.java:3757)
at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485)
at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762)
at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:394)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$353(GlassViewEventHandler.java:432)
at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:431)
at com.sun.glass.ui.View.handleMouseEvent(View.java:555)
at com.sun.glass.ui.View.notifyMouse(View.java:937)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$147(WinApplication.java:177)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71)
at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275)
at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1771)
... 48 more
Caused by: java.lang.ExceptionInInitializerError
at view.MainController.authInWhatsapp(MainController.kt:19)
... 58 more
Caused by: java.lang.RuntimeException: java.lang.NoSuchMethodException: org.cef.CefApp.startup()
at com.codebrig.journey.JourneyLoader.setup(JourneyLoader.java:204)
at com.codebrig.journey.JourneyBrowserView.<clinit>(JourneyBrowserView.java:33)
... 59 more
Caused by: java.lang.NoSuchMethodException: org.cef.CefApp.startup()
at java.lang.Class.getMethod(Class.java:1786)
at com.codebrig.journey.JourneyLoader.setup(JourneyLoader.java:198)
... 60 more
Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1774)
at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1657)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
at javafx.event.Event.fireEvent(Event.java:198)
at javafx.scene.Node.fireEvent(Node.java:8411)
at javafx.scene.control.Button.fire(Button.java:185)
at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:182)
at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:96)
at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:89)
at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
at javafx.event.Event.fireEvent(Event.java:198)
at javafx.scene.Scene$MouseHandler.process(Scene.java:3757)
at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485)
at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762)
at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:394)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$353(GlassViewEventHandler.java:432)
at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:431)
at com.sun.glass.ui.View.handleMouseEvent(View.java:555)
at com.sun.glass.ui.View.notifyMouse(View.java:937)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$147(WinApplication.java:177)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71)
at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275)
at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1771)
... 48 more
Caused by: java.lang.NoClassDefFoundError: Could not initialize class com.codebrig.journey.JourneyBrowserView
at view.MainController.authInWhatsapp(MainController.kt:19)
... 58 more
Journey isn't filling in parent component on Windows. Tested on 0.2.18. ref #3
Reproducible example: https://github.com/BFergerson/journey-intellij-windows-issue
Thank you very much for developing this!
I have a question about the online and offline libraries. If we use the online version, what does that mean? When would it need to go online to get something?
Also need to fix how offline distribution determine which version to embed. Fixing this will just make the macOS version start packing 75 instead of 69.
Hi,
Running the example code in the readme, I get the following error:
Exception in thread "main" java.lang.ExceptionInInitializerError
at main.main(main.java:16)
Caused by: java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at com.codebrig.journey.JourneyLoader.setup(JourneyLoader.java:204)
at com.codebrig.journey.JourneyBrowserView.<clinit>(JourneyBrowserView.java:33)
... 1 more
Caused by: java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:78)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:567)
at com.codebrig.journey.JourneyLoader.setup(JourneyLoader.java:199)
... 2 more
Caused by: java.lang.UnsatisfiedLinkError: no jcef in java.library.path: /usr/java/packages/lib:/usr/lib64:/lib64:/lib:/usr/lib
at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2423)
at java.base/java.lang.Runtime.loadLibrary0(Runtime.java:808)
at java.base/java.lang.System.loadLibrary(System.java:1893)
at org.cef.CefApp.startup(CefApp.java:531)
... 7 more
Seeing that there are issues with the 0.4 release, I also tried the 0.3.3 release. Both offline and online. Nothing changes.
I am running it with IntelliJ, JDK 16 on a x64 Linux.
What's the issue? I tried to google the error, but I couldn't find anything relevant.
Help would be very much appreciated, as I'd really like to use this in my project, but can't get it to work.
example:
<img src="custom:a.jpg"/>
I want the src get data from java local jpg bytes data.
ref #11
I don't have a mac to test on but the mac build appears to be running into this issue: https://bitbucket.org/chromiumembedded/java-cef/issues/270/mac-os-10124-build-fails-with-java-version
Thank you for the project. I've been looking for an alternative to JxBrowser as it's such a rip off and stumbled across your project.
Currently I'm on OSX and am having issues running the code because of incompatibilities with JDK8 - https://magpcss.org/ceforum/viewtopic.php?f=17&t=16295. I'm getting a java.lang.NoSuchMethodErrorjava.awt.Component.getPeer()Ljava/awt/peer/ComponentPeer
message.
However, after some googling, I found out that there is a new version of java-cef that comes with the jdk-11 fixes:
https://bitbucket.org/chromiumembedded/java-cef/issues/314/update-to-jdk11
I'm hoping that a new version of Journey can be released with the newest updates so I can try out the library again.
Thanks!
Journey currently embeds JCEF internally. This ties the Journey internal code to use a specific version of the CEF native files. Instead, Journey should dynamically download and load the JCEF code like it does the CEF native files.
when running the 0.4.0 offline jar on windows 10 I get a mixed extraction folder that contains the macos jars instead of the windows jars. This in turn leads to a method not found exception from the startup call that does not exist in the older mac version https://github.com/CodeBrig/Journey/blob/master/src/main/java/com/codebrig/journey/JourneyLoader.java#L197-L200.
I suspect that the extraction routine in https://github.com/CodeBrig/Journey/blob/master/src/main/java/com/codebrig/journey/JourneyLoader.java#L138 filtering logic is at fault
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.