33 Commits

Author SHA1 Message Date
Adam Barth
407fb582bd Sky should use an SkPicture when drawing
This CL teaches the Sky compositor to record an SkPicture instead of just
drawing in immediate mode. Using an SkPicture will let us experiment with
various optimizations in Skia that preprocess the SkPicture before translating
the Skia commands to GL commands.

This CL also refactors the "display delegate" system now that we can hand off
an SkPicture to a rasterization backend. The new design requires fewer
backpointers and removes the static display delegate factory.

R=eseidel@google.com

Review URL: https://codereview.chromium.org/854303002
2015-01-19 18:47:53 -08:00
Adam Barth
e4ade99b70 Move WebInputEvent from public/web to public/platform
Moving WebInputEvent into public/platform lets us refer to it directly in core, which will let us remove the PlatformFooEvent classes.

The final pipeline will be:
1) mojo::InputEvent (IPC type, device pixels)
2) blink::WebInputEvent (platform abstraction, logical pixels)
3) blink::Event (DOM type, logical pixels)

If mojo::InputEvent used logical pixels, it would probably be easier to just
use mojo::InputEvent as the platform abstraction, but instead we use the
mojo-to-blink conversion to translate between device and logical pixels, like
we do everywhere else in Sky.

R=eseidel@google.com, eseidel@chromium.org

Review URL: https://codereview.chromium.org/860593003
2015-01-19 18:39:39 -08:00
James Robinson
be2f656ab1 Pass ServiceProvider and ServiceProvider& params in Connect
In preperation for removing the Client annotation from ServiceProvider
this passes a second parameter of type ServiceProvider in the shell and
application Connect calls. In this patch the type signatures are updated
but the second parameter is basically unused. The intention is that the
first parameter |services| will be used for the connecting application to
request services from the connected application (as it does currently)
and the second parameter |exported_services| be used for the connecting
application to provide services to the connected application. We have
very few services exported in the second direction today - I'll update
them to use the second parameter in a follow-up patch.

R=darin@chromium.org

Review URL: https://codereview.chromium.org/845593003
2015-01-14 14:33:07 -08:00
Adam Barth
1dee21f363 Sky events should be in dips rather than ddpxs
Mojo events are in physical pixels but Sky works in logical pixels. This CL
changes the code that converts from Mojo events to Sky events to scale by the
device_pixel ratio.

R=ojan@chromium.org

Review URL: https://codereview.chromium.org/854603004
2015-01-14 13:50:01 -08:00
Adam Barth
e7d8bc15db Scale Sky contents by the device pixel ratio
On devices with a non-trivial device pixel ratio, we need to tell Sky about the
device pixel ratio so that it can scale up its rendering to the appropriate
size.

R=eseidel@chromium.org, esprehn@chromium.org

Review URL: https://codereview.chromium.org/851533002
2015-01-12 11:19:03 -08:00
Scott Violet
bafedfb8f6 Moves Create() off of View and onto ViewManager
This makes more sense given the ViewManager is used to create the
view.

R=ben@chromium.org

Review URL: https://codereview.chromium.org/818583002
2014-12-19 07:45:16 -08:00
Scott Violet
17d7739f7c Nukes ViewManager arg from ViewManagerDelegate::OnEmbed
It can be obtained from the supplied view, so no reason to include in
the arguments.

R=ben@chromium.org, esprehn@chromium.org

Review URL: https://codereview.chromium.org/815003002
2014-12-18 14:35:42 -08:00
James Robinson
a30b0288e2 Split surface id and simplify connecting to surfaces service
Surface IDs are composed of a namespace component and a local
identifier component. This splits up the two pieces in the mojom to make
it clearer.

This also simplifies the path for connecting to the surfaces service. In
order to perform any operations with surfaces, each client must know
what its id namespace value is. This was done by first connecting to a
SurfacesService interface and then calling CreateSurfaceConnection which
returned a Surface pointer and the namespace. Having to connect to this
extra interface and receive the Surface impl asynchronously complicated
startup code for applications by adding extra states in startup.

Instead of that, this allows connecting to the Surface interface
directly and promises that the ID namespace will be provided as the
first message in the pipe directed at the SurfaceClient. Callers can
then either block on startup or handle setting the ID namespace
asynchronously depending on what other things that thread could be doing
at the time.

In a follow-up, I plan to define the id namespace value 0 as meaning "the
namespace of this connection" which will allow creating surfaces and
submitting frames before learning the connection's namespace. The only
thing the namespace will be passing surface IDs to other clients for them
to embed.

This also removes the Size parameter from CreateSurface, which wasn't
used by anything. The size of submitted frames is part of the embedder /
embedee contract.

R=esprehn@chromium.org, sky@chromium.org

Review URL: https://codereview.chromium.org/807733002
2014-12-16 15:15:22 -08:00
Ojan Vafai
0fcf250d03 Make reftests work for sky.
-Add a --testing flag to sky_viewer and cause it to paint into an
SkBitmap instead of a ganesh surface so we can get the pixels out.
-Add GetPixelsForTesting to layer.cc to actually grab out the pixels.
-Add a reftest and a mismatch reftest. They need a setTimeout after
the load event. Unclear why or what the right fix is. Maybe we should
give internals some way to force the paint? If we don't have the
setTimeout, we paint a white page (so we do a paint, but with no
content).
-Add a DisplayDelegate to Layer so that Viewer can decide whether
to use the real ganesh backend or the SkBitmap one without littering
the whole code-base with is_testing bools and logic.

R=esprehn@chromium.org

Review URL: https://codereview.chromium.org/797063002
2014-12-12 16:45:49 -08:00
Colin Blundell
7db78fcb33 Restructure public side of surfaces service.
This CL goes from this:
  //mojo/services/public/cpp/surfaces
  //mojo/services/public/interfaces/surfaces

to this:
  //mojo/services/surfaces/public/cpp
  //mojo/services/surfaces/public/interfaces

This CL also makes the Mojo-side changes required to roll this change into
Chromium.

TBR=beng

Review URL: https://codereview.chromium.org/792813002
2014-12-10 14:43:23 +01:00
Colin Blundell
3dc76a69df Restructure public side of view_manager service.
This CL goes from this:
//mojo/services/public/cpp/view_manager
//mojo/services/public/interfaces/view_manager

to this:
//mojo/services/view_manager/public/cpp
//mojo/services/view_manager/public/interfaces

This CL also makes the Mojo-side changes required to roll this change into
Chromium (for both view_manager and window_manager, which was converted in an
earlier CL but for which these updates were not made):
- Updates rev_sdk.py to pull over the new directory
- Updates //mojo/services/public/mojo_services_public.gyp

TBR=beng

Review URL: https://codereview.chromium.org/790623003
2014-12-10 14:16:27 +01:00
Benjamin Lerman
72a73fc07f Remove shutdown code from sky.
R=aa@chromium.org, eseidel@chromium.org

Review URL: https://codereview.chromium.org/783973002
2014-12-09 11:00:15 +01:00
Eric Seidel
c14361a751 Remove Isolated Worlds from Sky
These were a feature for allowing multiple
scripting contexts to access the same global
state without leaking wrappers between them.
For example, if the inspector wanted to
modify window.Array.dangerousFunction = ...
it wouldn't want the author's content to have
access to that.

This feature is not part of Sky's security model
and thus this is just dead code.

I tried to remove worlds all together, but there
is something special about how we use a
"fake" world (which is neither main nor isolated)
for GC, regexp and testing.

R=rafaelw@chromium.org, abarth@chromium.org
BUG=

Review URL: https://codereview.chromium.org/776143003
2014-12-03 15:51:09 -08:00
Ojan Vafai
767c998cb2 Remove ENABLE(COMPOSITOR).
The new painting code seems to be working well enough.
So we can start removing the old compositing code.

R=abarth@chromium.org

Review URL: https://codereview.chromium.org/762723002
2014-11-25 19:32:27 -08:00
Adam Barth
d906ce5b41 Break Sky's dependency on cc
We no longer link with cc. Instead, we use a simple, direct-to-Ganesh rendering
pipeline.

R=esprehn@chromium.org

Review URL: https://codereview.chromium.org/752683002
2014-11-21 12:21:39 -08:00
Adam Barth
cc9da50737 Enable the Sky compositor
Turns out we need to reset the context before switching back to drawing with
Ganesh (i.e., call resetContext on the GrContext) to clean out whatever state we've
changed in the GL context. Now the city-list and the flights-app demos work.

R=esprehn@chromium.org

Review URL: https://codereview.chromium.org/752653002
2014-11-21 09:57:47 -08:00
Benjamin Lerman
ba6f3beacd Make sure that Content Handled application can be connected multiple times.
This CL updates ApplicationManager so that it always reconnect to an
application that is already launched.

To obtain this results, the following changes habe also been made:

1) The Loader interface has been simplified:
  - The pipe to the shell if given during the Load request, so that loader do
    not need to called RegisterLoadedApplication
2) PngViewer and PdfViewer allows multiple embedder to embed those.
3) For the second connection forward, Sky issue network request to get the
   content of the page to display.

R=aa@chromium.org

Review URL: https://codereview.chromium.org/741453002
2014-11-21 10:53:37 +01:00
Adam Barth
7781f093a2 Wire up Sky directly to Ganesh
This CL wires up Sky directly to Ganesh via the Sky compositor. Currently this
code is compiled out of the binary because it's a bit buggy, but this CL is a
start.

R=ojan@chromium.org

Review URL: https://codereview.chromium.org/739413004
2014-11-20 19:15:31 -08:00
Eric Seidel
e4945302eb Move InspectorBackendMojo out of the blink namespace
This starts to break the dependency between blink and
the new v8_inspector.  At least now the front-end
object InspectorBackendMojo is treated as a peer to
WebView instead of WebView providing one.

Unfortunately I also had to teach Page about
InspectorHost in order to make it possible to
lookup the InspectorHost from the v8::Context.

I'm sure there is a nicer way to associate the
InspectorHost with the context but for now
I've chosen this path, we can untangle the
connection in a later patch.

I also ended up removing Page::allPages
and all callers, since they ended up as dead code.

R=abarth@chromium.org, yurys@chromium.org
BUG=435243

Review URL: https://codereview.chromium.org/746713002
2014-11-20 14:21:36 -08:00
Scott Violet
90f1388f44 Makes views be initially hidden
This better matches what other toolkits do and lets the client
configure the view before we attempt to show something for it.

BUG=434429
TEST=covered by test
R=erg@chromium.org

Review URL: https://codereview.chromium.org/745743002
2014-11-20 13:04:25 -08:00
Rafael Weinstein
1dddb1fc9a Add compile flag for enabling the compostior
R=abarth@chromium.org

Review URL: https://codereview.chromium.org/737793006
2014-11-19 14:34:09 -08:00
Eric Seidel
593c8f8de3 Wire up more of the DebuggerAgent
The debugger can now correctly break on exceptions
and show the corresponding line in the inspector.

It correctly understands which scripts are internal
to sky and does not pause during them.

There is still a ton to make work here
(including stacktraces which I have not tested),
but basic functionality seems to work.

The current implementation is not smart enough to
unpause the inspector when the frontend disconnects.

BUG=434510,434513
R=abarth@chromium.org

Review URL: https://codereview.chromium.org/727593004
2014-11-18 15:05:05 -08:00
Adam Barth
b75be5c88b Fix contenteditable
You can now make elements editable using the contenteditable attribute.

R=rafaelw@chromium.org

Review URL: https://codereview.chromium.org/716223003
2014-11-12 14:37:41 -08:00
Matt Perry
5907fa183a Sky: Add a test for the <iframe> element.
Had to disable a DCHECK for now. Scott will investigate why the DCHECK is hit.

BUG=432658
R=sky@chromium.org

Review URL: https://codereview.chromium.org/722713003
2014-11-12 16:50:34 -05:00
Matt Perry
d4ddbf836c Add a separate call to initialize the bounds for a sky <iframe> element.
Also rename the methods to refer to "frames" not "views".

R=abarth@chromium.org

Review URL: https://codereview.chromium.org/682413006
2014-11-11 11:11:59 -05:00
Matt Perry
694cabc454 Initial work on a new <view> element backed by a mojo::View.
This CL introduces an HTMLViewElement which, when inserted into a document,
causes a mojo::View to be created and navigated to the provided URL. No
compositing is done, but the view manager handles the rendering (as I
understand it).

R=abarth@chromium.org

Review URL: https://codereview.chromium.org/708903002
2014-11-07 14:34:07 -05:00
Benjamin Lerman
2cdc639a09 Change mojo url to always use mojo:foo instead of mojo://foo
R=abarth@chromium.org

Review URL: https://codereview.chromium.org/701933004
2014-11-06 17:23:18 +01:00
Adam Barth
e18d99a0f3 Make clicks on <a> request a navigation
Currently our window manager isn't listening for these requests, but it would
work if we loaded sky in wm_flow or example_window_manager.

R=eseidel@chromium.org

Review URL: https://codereview.chromium.org/695803003
2014-10-31 11:27:44 -07:00
Adam Barth
97565a73db Introduce blink::ServiceProvider
This CL is a warmup for making hyperlinks actually work. ServiceProvider lets
the embedder inject a bundle of services that are specific to the embedding
context (e.g., NavigatorHost). Services that are independent to the embedding
context can be injected via blink::Platform.

R=eseidel@chromium.org

Review URL: https://codereview.chromium.org/696733003
2014-10-31 10:54:03 -07:00
Benjamin Lerman
35d410ab00 mojo: Update content handler API
WIP

R=aa@chromium.org, abarth@chromium.org, hansmuller@chromium.org

Review URL: https://codereview.chromium.org/687273002
2014-10-31 18:23:10 +01:00
Adam Barth
74db9da5e1 Add inspect command to skydb
This CL adds an "inspect" command to skydb that injects the inspector module
into the page and prints some instructions for opening the inspector.

R=eseidel@chromium.org

Review URL: https://codereview.chromium.org/690433004
2014-10-28 17:08:25 -07:00
John Abd-El-Malek
b9e88bad01 Fix build.
R=esprehn@chromium.org

Review URL: https://codereview.chromium.org/659043004
2014-10-23 14:54:07 -07:00
Adam Barth
ae72930937 Open the Sky 2014-10-23 11:17:19 -07:00