How install custom pepper plugin in Chromium browser source code? - google-chrome

I need to build in my pepper plugin in chromium source code for building browser with already installed plugin. Is there possibility to do that?

A handful of plugins are built in. Since these are plugins, they are built independently from Chrome and loaded dynamically rather than directly linked to the Chromium executable. This is the function that causes them to be loaded into Chromium:
https://code.google.com/p/chromium/codesearch#chromium/src/chrome/common/chrome_content_client.cc&rcl=1436599777&l=118
The NaCl plugin is special, since it runs "in process", which means it is loaded into the renderer process. Eventually, support for this kind of plugin will be eliminated, so it is best to follow the pattern of the "out of process" plugins, which run in their own process, such as PDF.

Related

Does Google allow to load its libraries on a headless browsers (PhantomJS)?

Does Google allow to load its libraries on a headless browsers? I am running tests with PhantomJS but they are failing because it Can't find the variable: google, but if I run the tests in Chrome they all pass.
Yes, Google JavaScript libraries run1 on PhantomJS. It's the way they come to PhantomJS that's troubling sometimes. Most web servers disabled support for SSL v3 because of the POODLE vulnerability, but PhantomJS <1.9.8 uses it as a default.
You either need to pass the --ssl-protocol=tlsv1 --ignore-ssl-errors=true commandline flags to PhantomJS when you run it or you can update to a newer version such as 1.9.8 or 2.0.0.
1 That's not exactly true, since PhantomJS 1.x also doesn't implement Function.prototype.bind which many web sites use and which might stop the execution of some JavaScript.

Chrome: Attaching nacl-gdb to packaged application loaded as an unpacked extension

I have built a simple NaCl application. For running the application I use technique 2 described in Nacl Developer's guide, which means that instead of running a local server I load my application as unpacked extension to chrome. The application runs fine so far.
Now I want to experiment with nacl-gdb and attach my application to it at startup.
In the NaCl Developer's guide there are only instructions on how to attach nacl-gdb on an application that is run with local server(technique 1). I made a search to the internet and I ended up with the following approach in order to attach nacl-gdb for an application that is being ran with technique 2:
I enabled "Native Client GDB-based debugging" flag of Chrome.
I started chrome from a terminal like this: ./chrome "--nacl-gdb=gnome-terminal --
/media/sdb1/leonidasbo/AncientRoot/nacl_sdk/pepper_27/toolchain/linux_x86_glibc/bin/x86_64-nacl-gdb"
When Chrome launched, I navigated to my application.
With this approach, Chrome automatically started nacl-gdb when I opened my application.
However nacl-gdb tried to attach but with no success. The output was the following:
*This GDB was configured as "--host=x86_64-unknown-linux-gnu --target=x86_64-nacl".
Reading symbols from /opt/google/chrome/nacl_irt_x86_64.nexe...(no debugging symbols found)...done.
Don't know how to attach. Try "help target".
(gdb)*
It seems that gdb cannot attach to my application. I tried executing "target exec /path/to/my.nexe", but nothing changed.
Am I missing something here? Is there any other way to debug applications loaded as unpacked extensions with nacl-gdb?
My OS is Ubuntu 12.04 and I am using pepper_27 of nacl_sdk. Chrome version is 27.0.1453.93.
Thanks
I assume you were using this guide, which I was using earlier as well. It is out of date. These are the real instructions. It seems that the way you attach the debugger has completely changed, and it is no longer possible to use --nacl-gdb (that is planned for removal). You must manually attach the debugger by following these steps.
The full guide is here, but I'll summarize:
Launch Chrome with chrome --enable-nacl --enable-nacl-debug --no-sandbox --disable-hang-monitor.
Run <NACL_SDK_ROOT>/toolchain/win_x86_newlib/bin/x86_64-nacl-gdb (with no arguments).
Enter these commands into the gdb prompt:
(gdb) nacl-manifest <path-to-your-.nmf-file>
(gdb) nacl-irt <CHROME-DIR>/nacl_irt_x86_64.nexe
(gdb) target remote localhost:4014
Now you can use gdb as normal. (If you just want to run the application until it crashes, start by typing continue.)

NPAPI plugin Windows DLL dependencies

I created an NPAPI plugin that I'm packaging within a Chrome extension. I'm able to successfully install and use the extension in Chrome on Windows 2003 and Windows XP 64-bit.
However, when I install the plugin on Windows 7 (either 32-bit or 64-bit) or Windows XP 32-bit, I'm unable to use the extension within Chrome. The chrome logs reveal the error message "Couldn't initialize plug-in".
I ran the dependency walker in all of my environments and it looks like in the environments where the extension doesn't work, they all have in common the warning message "Warning: At least one module has an unresolved import due to a missing export function in a delay-load dependent module." (the DLL's in question are SHLWAPI.DLL, IEFRAME.DLL, and MPR.DLL) whereas the environments where the extension does work don't have this warning (although one of them does warn of a delay-load dependency module not being found).
Should these DLL dependencies be different across different versions of Windows? What's the best way to resolve them? Or is the plugin failure most likely not related to these DLL dependencies?
Rebuild your project without dependencies on the runtime libraries by compiling your binaries with the "/MT" compiler flag instead of the default "/MD".
If you depend on open source code, make sure to rebuild each of those projects with the "/MT" flag, otherwise you will be chasing these runtime DLL issues forever.
shlwapi and ieframe are probably unrelated to your issue; seeing those errors is a common issue. not sure about mpr.dll, haven't seen that one.
You might try a FireBreath plugin and compare the dependency walker results and see if you can spot anything you're requiring that firebreath doesn't, since firebreath has no external DLL dependencies.

AIR file too big, breaks during installation

A client is having me convert an HTML5 video web application that I've already built into an AIR app.
The end users are going to need this to work with no internet access, so I MUST include a LOT of video files with the installer. This works fine on my machine, but my client can't install it because the .air file is too large and they don't have enough RAM. We'll need this installed on a number of laptops that aren't super powerful.
My SDK is up to date and we're using AIR 3.1.
Has anyone else run into a similar situation? Is there any workaround? For instance could I either include both the installer and the .air in a zipped folder, then have the installer move the video files to the appropriate location, or use AS to have the installer download the files (they will have internet access when installing).
I'd recommend you not to include heavy video files into your application. Downloading assets from web is a descent idea, I use same technique for several museum touchscreen apps.
So here's workflow: on startup app tries to connect to "assets server" and request list of files to download. It can be list of all the files, or list of files that have been updated/added since timestamp that you pass with your request. Then you download them to File.applicationStorageDirectory. Not to have mess in that directory I put all of them to "cache" subdirectory.
In case there's no internet connection for some reason when you install that app, you can have all that "cache" folder on your memory-stick/externalHD so you can manually perform that downloading process.
If you use Greensock's LoaderMax: I've written a simple URLStreamLoader that extends LoaderItem, handy for downloading files. Can share that.
The problem is quite obvious: the Adobe AIR provided installer for deploying your application is lacking.
However, Adobe recently released a new feature for deploying Adobe AIR apps: "runtime captive bundle" (Windows or OSX).
Which means 2 important things:
You receive an .exe which no longer requires an user to have Adobe AIR runtime installed (and no more incompatibilities when targeting multiple Adobe AIR runtimes).
You are no longer provided with an installer, and you have to find your own (which solves your problem halfway).
Target bundle when "compiling", and then just use a better installer (Windows or OSX) - think you are just deploying a normal application (worked for me:) ). There are too many installers arround to mention.
Your installer of choice + bundle compiling, together solve your offline installation requirement and the memory exhausting issue.
Packaging a captive runtime bundle for desktop computers

Standalone version of Chrome (for development)

I use the stable version of Google Chrome as my default browser on my system. I now need to work on a project requiring the development version of Chrome, yet I do not wish to replace my system install of Chrome.
Does there exist a standalone package of Chome which can be unpacked into a folder and executed entirely from there? Ie, it should not require anything to be installed, it should not touch the profile associated with my installed version of Chrome. I should be able to download different versions of this into different folders, and be sure that they do not conflict with each other..
(Ideally we could package up prototype builds complete with a copy of this version of Chrome. These packages would then be as self contained as a desktop application...)
You could download the Chromium flavour (which is the open source browser that runs Google Chrome). You can download the latest and greatest from:
http://build.chromium.org/buildbot/continuous/LATEST/
If you have specific dates/revision that you want to download, you can pick them from:
http://build.chromium.org/buildbot/continuous/
That will not interfere with the current version of Chrome, instead it will be using Chromium folder structure (chrome replaced with chromium everywhere).
Simply get the portable version, it does what as you need.
As an answer above, you could get Chromium (portable) which also includes chromedriver from chromium snapshots page.
Pick one with the biggest number (scroll down):
https://commondatastorage.googleapis.com/chromium-browser-snapshots/index.html?prefix=Win_x64/
If the link is dead, there is always a solution to build it from source code, it's a benefit of open source application.
https://chromium.googlesource.com/chromium/src/+/refs/heads/main/docs/windows_build_instructions.md#Build-Chromium
Chromium home page:
https://www.chromium.org/
Hope it helps!
I believe Chrome on Windows installs itself into the Application Data (/Users on Win7) folder of a user. While I can't test this at the moment, try creating a new user account, install Chrome, then log into your other account. Then try running both at the same time. Might be a bit hard to find the executable.
Another option would be to run it in a VM. More expensive versions of Win7 have this somewhat built-in (you need to download an XP image from Microsoft, but the VM software is pre-installed, I think) but you can also install VirtualBox + your own ISO. On a decent computer system, you shouldn't get too much of a performance hit.
A really silly way of doing this is installing the multiple concurrent users Remote Desktop hack, Remote Desktopping to your own computer (if that's possible) and running the second Chrome install as a different user.