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

Side by Side Diff: services/service_manager/README.md

Issue 2419723002: Move services/shell to services/service_manager (Closed)
Patch Set: rebase Created 4 years, 2 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 unified diff | Download patch
« no previous file with comments | « services/service_manager/OWNERS ('k') | services/service_manager/background/BUILD.gn » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Service Manager User Guide 1 # Service Manager User Guide
2 2
3 ## What is the Service Manager? 3 ## What is the Service Manager?
4 4
5 The Service Manager is a tool that brokers connections and capabilities between 5 The Service Manager is a tool that brokers connections and capabilities between
6 and manages instances of components, referred to henceforth as “services”. 6 and manages instances of components, referred to henceforth as “services”.
7 7
8 The Service Manager performs the following functions: 8 The Service Manager performs the following functions:
9 9
10 * Brokering connections between services, including communicating policies such 10 * Brokering connections between services, including communicating policies such
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
83 and the Service Manager destroys its corresponding instance and asks the process 83 and the Service Manager destroys its corresponding instance and asks the process
84 to exit. 84 to exit.
85 85
86 #### A simple Service example 86 #### A simple Service example
87 87
88 Consider this simple application that implements the Service interface: 88 Consider this simple application that implements the Service interface:
89 89
90 **app.cc:** 90 **app.cc:**
91 91
92 #include “"mojo/public/c/system/main.h”" 92 #include “"mojo/public/c/system/main.h”"
93 #include “"services/shell/public/cpp/application_runner.h”" 93 #include “"services/service_manager/public/cpp/application_runner.h”"
94 #include “"services/shell/public/cpp/connector.h”" 94 #include “"services/service_manager/public/cpp/connector.h”"
95 #include “"services/shell/public/cpp/connection.h”" 95 #include “"services/service_manager/public/cpp/connection.h”"
96 #include “"services/shell/public/cpp/identity.h”" 96 #include “"services/service_manager/public/cpp/identity.h”"
97 #include “"services/shell/public/cpp/service.h”" 97 #include “"services/service_manager/public/cpp/service.h”"
98 98
99 class Service : public shell::Service { 99 class Service : public shell::Service {
100 public: 100 public:
101 Service() {} 101 Service() {}
102 ~Service() override {} 102 ~Service() override {}
103 103
104 // Overridden from shell::Service: 104 // Overridden from shell::Service:
105 void OnStart(const shell::Identity& identity) override { 105 void OnStart(const shell::Identity& identity) override {
106 } 106 }
107 bool OnConnect(shell::Connection* connection) override { 107 bool OnConnect(shell::Connection* connection) override {
(...skipping 322 matching lines...) Expand 10 before | Expand all | Expand 10 after
430 430
431 TEST_F(Test, Basic) { 431 TEST_F(Test, Basic) {
432 mojom::SomeInterface some_interface; 432 mojom::SomeInterface some_interface;
433 connector()->ConnectToInterface(“"mojo:service"”, &some_interface); 433 connector()->ConnectToInterface(“"mojo:service"”, &some_interface);
434 base::RunLoop loop; 434 base::RunLoop loop;
435 some_interface->Foo(base::Bind(&QuitLoop, &loop)); 435 some_interface->Foo(base::Bind(&QuitLoop, &loop));
436 loop.Run(); 436 loop.Run();
437 } 437 }
438 438
439 The BUILD.gn for this test file looks like any other using the test() template. 439 The BUILD.gn for this test file looks like any other using the test() template.
440 It must also depend on //services/shell/public/cpp:shell_test_support. 440 It must also depend on //services/service_manager/public/cpp:shell_test_support.
441 441
442 ServiceTest does a few things, but most importantly it register the test itself 442 ServiceTest does a few things, but most importantly it register the test itself
443 as a Service, with the name you pass it via its constructor. In the example 443 as a Service, with the name you pass it via its constructor. In the example
444 above, we supplied the name “exe:service_unittest”. This name is has no special 444 above, we supplied the name “exe:service_unittest”. This name is has no special
445 meaning other than that henceforth it will be used to identify the test service. 445 meaning other than that henceforth it will be used to identify the test service.
446 446
447 Behind the scenes, ServiceTest spins up the Service Manager on a background 447 Behind the scenes, ServiceTest spins up the Service Manager on a background
448 thread, and asks it to create an instance for the test service on the main 448 thread, and asks it to create an instance for the test service on the main
449 thread, with the name supplied. ServiceTest blocks the main thread while the 449 thread, with the name supplied. ServiceTest blocks the main thread while the
450 Service Manager thread does this initialization. Once the Service Manager has 450 Service Manager thread does this initialization. Once the Service Manager has
451 created the instance, it calls OnStart() (as for any other service), and the 451 created the instance, it calls OnStart() (as for any other service), and the
452 main thread continues, running the test. At this point accessors defined in 452 main thread continues, running the test. At this point accessors defined in
453 service_test.h like connector() can be used to connect to other services. 453 service_test.h like connector() can be used to connect to other services.
454 454
455 You’ll note in the example above I made Foo() take a callback, this is to give 455 You’ll note in the example above I made Foo() take a callback, this is to give
456 the test something interesting to do. In the mojom for SomeInterface we’d have 456 the test something interesting to do. In the mojom for SomeInterface we’d have
457 the Foo() method return an empty response. In mojo:service, we’d have Foo() take 457 the Foo() method return an empty response. In mojo:service, we’d have Foo() take
458 the callback as a parameter, and run it. In the test, we spin a RunLoop until we 458 the callback as a parameter, and run it. In the test, we spin a RunLoop until we
459 get that response. In real world cases we can pass back state & validate 459 get that response. In real world cases we can pass back state & validate
460 expectations. You can see real examples of this test framework in use in the 460 expectations. You can see real examples of this test framework in use in the
461 Service Manager’s own suite of tests, under //services/shell/tests. 461 Service Manager’s own suite of tests, under //services/service_manager/tests.
462 462
463 ### Packaging 463 ### Packaging
464 464
465 By default a .library statically links its dependencies, so having many of them 465 By default a .library statically links its dependencies, so having many of them
466 will yield an installed product many times larger than Chrome today. For this 466 will yield an installed product many times larger than Chrome today. For this
467 reason it’s desirable to package several Services together in a single binary. 467 reason it’s desirable to package several Services together in a single binary.
468 The Service Manager provides an interface **shell.mojom.ServiceFactory**: 468 The Service Manager provides an interface **shell.mojom.ServiceFactory**:
469 469
470 interface ServiceFactory { 470 interface ServiceFactory {
471 CreateService(Service& service, string name); 471 CreateService(Service& service, string name);
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
550 to have the Service Manager start the executable itself, the second is to have 550 to have the Service Manager start the executable itself, the second is to have
551 some other executable start the process and then tell the Service Manager about 551 some other executable start the process and then tell the Service Manager about
552 it. In both cases, the target executable has to perform a handshake with the 552 it. In both cases, the target executable has to perform a handshake with the
553 Service Manager early on so it can bind the Service request the Service Manager 553 Service Manager early on so it can bind the Service request the Service Manager
554 sends it. 554 sends it.
555 555
556 Assuming you have an executable that properly initializes the Mojo EDK, you add 556 Assuming you have an executable that properly initializes the Mojo EDK, you add
557 the following lines at some point early in application startup to establish the 557 the following lines at some point early in application startup to establish the
558 connection with the Service Manager: 558 connection with the Service Manager:
559 559
560 #include “"services/shell/public/cpp/service.h”" 560 #include “"services/service_manager/public/cpp/service.h”"
561 #include “"services/shell/public/cpp/service_context.h”" 561 #include “"services/service_manager/public/cpp/service_context.h”"
562 #include “"services/shell/runner/child/runner_connection.h”" 562 #include “"services/service_manager/runner/child/runner_connection.h”"
563 563
564 class MyClient : public shell::Service { 564 class MyClient : public shell::Service {
565 .. 565 ..
566 }; 566 };
567 567
568 shell::mojom::ServiceRequest request; 568 shell::mojom::ServiceRequest request;
569 scoped_ptr<shell::RunnerConnection> connection( 569 scoped_ptr<shell::RunnerConnection> connection(
570 shell::RunnerConnection::ConnectToRunner( 570 shell::RunnerConnection::ConnectToRunner(
571 &request, ScopedMessagePipeHandle())); 571 &request, ScopedMessagePipeHandle()));
572 MyService service; 572 MyService service;
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
669 Under the Hood 669 Under the Hood
670 Four major components: Shell API (Mojom), Shell, Catalog, Shell Client Lib. 670 Four major components: Shell API (Mojom), Shell, Catalog, Shell Client Lib.
671 The connect flow, catalog, etc. 671 The connect flow, catalog, etc.
672 Capability brokering in the shell 672 Capability brokering in the shell
673 Userids 673 Userids
674 674
675 Finer points: 675 Finer points:
676 676
677 Mojo Names: mojo, exe 677 Mojo Names: mojo, exe
678 Exposing services on outbound connections 678 Exposing services on outbound connections
OLDNEW
« no previous file with comments | « services/service_manager/OWNERS ('k') | services/service_manager/background/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698