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

Side by Side Diff: chrome/common/extensions/docs/templates/articles/app_codelab6_lifecycle.html

Issue 12221067: Move Chrome Apps Codelab docs to developer.chrome.com (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fixed references to github, accordingly to the new github angularjs subdirectories; added a link to… Created 7 years, 10 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 | Annotate | Revision Log
OLDNEW
(Empty)
1 <h1 id="lab_6_lifecycle">Lab 6 - Lifecycle</h1>
2
3 <p>Like everything in this world, apps have a lifecycle. They are installed, la unched, restarted, suspended when the system needs to free up resources and unin stalled. This lab will show you the basics of the Chrome app lifecycle and how its heart, the event page (aka background script), is used.</p>
4
5 <h2 id="you_should_also_read">You should also read</h2>
6
7 <p><a href="http://developer.chrome.com/apps/app_lifecycle.html">Manage App Life cycle</a> in Chrome app docs</p>
8
9 <h2 id="the_event_page">The event page</h2>
10
11 <p>The event page is one of the most important pieces of a Chrome app. It&#39;s responsible for what gets launched, when, and how.
12 For example, if your app is an instant messenger, you might want your event page to only show a UI when there is a new notification.</p>
13
14 <p>For simpler apps, the event page listens to the app lifecycle events and reac ts appropriately.
15 There are two important lifecycle events, <a href="http://developer.chrome.com/t runk/apps/app.runtime.html#event-onLaunched">onLaunched</a> and <a href="http:// developer.chrome.com/trunk/apps/app.runtime.html#event-onRestarted">onRestarted< /a>.</p>
16
17 <h2 id="the_onlaunched_event_and_the_chrome_app_window_create_method">The onLaun ched event and the chrome.app.window.create method</h2>
18
19 <p>onLaunched is the most important event. It fires when the user clicks on your app&#39;s icon with the intent of launching it. For most simpler apps, the even t page will listen for this event and open a window when it fires. See our <code >main.js</code> for the most common usage.</p>
mkearney1 2013/02/12 22:22:11 This should be a link to the onLaunched API.
mkearney1 2013/02/12 22:22:11 This should really link to main.js
Renato Mangini (chromium) 2013/02/13 22:55:33 Done.
Renato Mangini (chromium) 2013/02/13 22:55:33 Done.
20
21 <h3 id="windows_with_ids">Windows with IDs</h3>
22
23 <p>The <a href="http://developer.chrome.com/trunk/apps/app.window.html#method-cr eate">chrome.app.window.create</a> method can associate an ID to the window bein g opened. Currently, the most interesting use for this is to restore a window&#3 9;s width, height and location and its associated Developer Tools window, if ope ned, when the app is launched. </p>
24
25 <p>Execute your app as it is now, move and resize the window, close and restart it. The app will reopen in the original location, right? Now add a property <cod e>id</code> to the <a href="https://github.com/GoogleChrome/chrome-app-codelab/b lob/master/lab6_lifecycle/angularjs/main.js">main.js</a>, reload the app and tes t again:</p>
26
27 <p><pre>js
28 chrome.app.runtime.onLaunched.addListener(function() {
29 chrome.app.window.create(&#39;index.html&#39;,
30 {id: &#39;mainwindow&#39;, width: 500, height: 309});
31 });
32 </pre></p>
33
34 <p>If your application requires, you can open more than one window.</p>
35
36 <h2 id="the_onrestarted_event">The onRestarted event</h2>
37
38 <p>The onRestarted event is not as essential as onLaunched, but it might be rele vant to certain types of apps.
mkearney1 2013/02/12 22:22:11 This should link to the onRestarted and onLaunche
Renato Mangini (chromium) 2013/02/13 22:55:33 Where are these docs? For onLaunched, I've linked
mkearney1 2013/02/13 23:17:57 There in app.runtime api: http://developer.chrome.
Renato Mangini (chromium) 2013/02/14 15:45:27 Done.
39 This event is executed when the app is restarted, for example, when Chrome quits , restarts, and the app is launched again.
40 You can use this event to restore a transient state. </p>
41
42 <p>For example, if your app has a form with several fields, you won&#39;t always want to save the partial form while the user is typing.
43 If the user quits the app on purpose, she might not be interested keeping the pa rtial data.
44 If the Chrome runtime restarted for some reason other than by a user&#39;s inten tion, the user will want that data when the app is restarted.</p>
45
46 <p>Let&#39;s change our code to save the Todo input field in <a href="http://dev eloper.chrome.com/trunk/apps/storage.html">chrome.storage.local</a> as the user types, only restoring it if the onRestarted event is triggered.</p>
mkearney1 2013/02/12 22:22:11 Wrap onRestarted in <code>
Renato Mangini (chromium) 2013/02/13 22:55:33 Done.
47
48 <p class="note"><b>Note:</b> We learned about chrome.storage.sync before, but c hrome.storage.local wasn&#39;t mentioned until now. Both have exactly the same s yntax, but the semantics of chrome.storage.local is, as the name says, completel y local.
mkearney1 2013/02/12 22:22:11 Link to storage API. Also wrap API in <code>.
Renato Mangini (chromium) 2013/02/13 22:55:33 Done.
49 There&#39;s no attempt to synchronize or to save the data in the cloud.</p>
50
51 <ul>
52 <li><p>Event page: <a href="https://github.com/GoogleChrome/chrome-app-codelab/b lob/master/lab6_lifecycle/angularjs/main.js">main.js</a>
53 <pre>
54 chrome.app.runtime.onLaunched.addListener(function() {
55 // normal launch initiated by the user, let&#39;s start clean.
56 // note that this is not related to the persistent state, which is
57 // appropriately handled in the window code.
58 runApp(false);
59 });
60
61 chrome.app.runtime.onRestarted.addListener(function() {
62 // if restarted, try to get the transient saved state
63 runApp(true);
64 });
65
66 function runApp(readInitialState) {
67 chrome.app.window.create(&#39;index.html&#39;,
68 {id: &#39;mainwindow&#39;, width: 500, height: 309},
69 // the create callback gets a reference to the AppWindow obj
70 function(win) {
71 // when the callback is executed, the DOM is loaded but no script was
72 // loaded yet. So, let&#39;s attach to the load event.
73 win.contentWindow.addEventListener(&#39;load&#39;, function() {
74 if (readInitialState) {
75 win.contentWindow.setInitialState();
76 } else {
77 win.contentWindow.clearInitialState();
78 }
79 });
80 });
81 }
82 </pre></li><li>Controller: add to existing <a href="https://github.com/GoogleChr ome/chrome-app-codelab/blob/master/lab6_lifecycle/angularjs/controller.js">contr oller.js</a>
83 <pre>
84 var newTodoInput = null;
85
86 var clearInitialState = function() {
87 chrome.storage.local.set({&#39;newtodo&#39;: null});
88 }
89
90 var setInitialState = function() {
91 chrome.storage.local.get(&#39;newtodo&#39;, function(data) {
92 if (newTodoInput &amp;&amp; data &amp;&amp; data.newtodo) {
93 newTodoInput.value = data.newtodo;
94 newTodoInput.focus();
95 }
96 });
97 }
98
99 window.addEventListener(&#39;load&#39;, function() {
100 var saveTransientState = function() {
101 chrome.storage.local.set({&#39;newtodo&#39;: newTodoInput.value});
102 };
103 newTodoInput = document.querySelector(&#39;input[type=&quot;text&quot;]&#39;);
104 newTodoInput.addEventListener(&#39;keypress&#39; , function() {
105 saveTransientState();<br>
106 })
107 })
108 </pre></p></li><li><p>Save the changes by reloading the app: open the app, right -click and select Reload.</p></li>
109 </ul>
110
111 <p>If Chrome and the app shuts down for any reason (other than a user-gesture), the onRestarted event is fired.
mkearney1 2013/02/12 22:22:11 onRestarted should be in <code>.
Renato Mangini (chromium) 2013/02/13 22:55:33 Done.
112 Any text entered in the input field (but not yet saved as a Todo item) will reap pear when Chrome and the app are reopened.</p>
113
114 <p class="note"><b>Note:</b> If you get stuck and want to see the app in action , go to <code>chrome://extensions</code>,
115 load the unpacked <a href="app_codelab6_lifecycle.html">lab6_lifecycle</a>, and launch the app from a new tab.</p>
116
117 <h1 id="takeaways_">Takeaways:</h1>
118
119 <ul>
120 <li>The event page may continue to run even when your windows are closed.
121 You can move logic that is shared among windows to the event page, as we will se e in <a href="app_codelab9_multipleviews.html">lab9</a>.</li>
122 </ul>
mkearney1 2013/02/12 22:22:11 The font looks a bit small here. Any idea why?
Renato Mangini (chromium) 2013/02/13 22:55:33 Done.
123
124 <h1 id="what_39_s_next_">What&#39;s next?</h1>
125
126 <p>In <a href="app_codelab7_useridentification.html">lab7_useridentification</a> ,
127 you will learn how to identify users and use OAuth2.0 to access Google and other third party services.</p>
128
129 <p class="note"><b>Note:</b> The <a href="http://developer.chrome.com/trunk/app s/app_identity.html">identify API</a> covered in lab 7 is still experimental.</p >
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698