On Sun, Dec 20, 2009 at 03:03:23AM -0800, Evan Martin wrote:
On Sat, Dec 19, 2009 at 9:32 PM, cpu c...@chromium.org wrote:
Yes, the MasterPreferences is what we use so far. It is just a json
file in a particular path. I am not sure if we have enabled this for
the linux build.
It hasn't.
See browser_main.cc around line 540, the part that mentions
ProcessMasterPreferences:
http://src.chromium.org/cgi-bin/gitweb.cgi?p=chromium.git;a=blob;f=chrome/browser/browser_main.cc;h=ff1d17d7277b5df9a9e1d901adaf326ee6c2c6ff;hb=HEAD#l539
You could probably follow the Windows implementation of
ProcessMasterPreferences (see first_run_win) to make a Linux one, but
it will of course be rather different.
Okay, I started looking into this. After a bit of work, I'm to the
point where I need to process the master_preferences json file.
That is, I am currently writing a ProcessMasterPreferences function
in first_run_gtk.cc. It looks like for Windows much of the work for
processing the file is done using install_util, which doesn't appear
to even be included in the build for Linux. So, I have a couple of
questions...
What would be the preferred approach to processing the
master_preferences file in Linux? At a glance, it looks like
chrome/installer/util/master_preferences.cc might have everything
needed if it was built it for Linux, but should the parsing be done
somewhere more general and/or more portable? Documentation says
that chrome/installer has source files and projects for making the
installer (MSI package).
My other question is about the location of the master_preferences
file. In Windows, the file is required to be located in the same
directory as the chrome EXE (DIR_EXE). For Linux, I'm not sure that
this would fit. Any thoughts?
I will attach what I've come up with so far, in case someone is
interested. There are probably things I've done already that are
completely wrong :)
Thanks much,
Brian
--
Chromium Developers mailing list: chromium-dev@googlegroups.com
View archives, change email options, or unsubscribe:
http://groups.google.com/group/chromium-devdiff --git a/chrome/browser/browser_main.cc b/chrome/browser/browser_main.cc
index 521513f..884968b 100644
--- a/chrome/browser/browser_main.cc
+++ b/chrome/browser/browser_main.cc
@@ -59,6 +59,7 @@
#include chrome/common/result_codes.h
#include chrome/installer/util/google_update_settings.h
#include chrome/installer/util/master_preferences.h
+#include googleurl/src/gurl.h
#include grit/chromium_strings.h
#include grit/generated_resources.h
#include net/base/cookie_monster.h
@@ -258,7 +259,14 @@ void AddFirstRunNewTabs(BrowserInit* browser_init,
#else
// TODO(cpu): implement first run experience for other platforms.
void AddFirstRunNewTabs(BrowserInit* browser_init,
-const std::vectorstd::wstring new_tabs) {
+const std::vectorGURL new_tabs) {
+ std::vectorGURL::const_iterator it = new_tabs.begin();
+ while (it != new_tabs.end()) {
+std::cout *it std::endl;
+if (it-is_valid())
+ browser_init-AddFirstRunTab(*it);
+++it;
+ }
}
#endif
@@ -550,6 +558,26 @@ int BrowserMain(const MainFunctionParams parameters) {
AddFirstRunNewTabs(browser_init, first_run_tabs);
#endif // OS_WIN
+#if defined(OS_LINUX)
+// Process master preferences differently for Linux
+std::vectorGURL first_run_tabs;
+
+/*
+// specify some first_run_tabs urls manually just to test that this works
+// in Linux
+GURL a(http://www.landrover.com;);
+GURL b(http://www.pizzahut.com;);
+first_run_tabs.push_back(a);
+first_run_tabs.push_back(b);
+*/
+first_run_ui_bypass = !FirstRun::ProcessMasterPreferences(user_data_dir,
+FilePath(), first_run_tabs, homepage_defined, import_items,
+dont_import_items);
+
+if (first_run_tabs.size())
+ AddFirstRunNewTabs(browser_init, first_run_tabs);
+#endif
+
// If we are running in App mode, we do not want to show the importer
// (first run) UI.
if (!first_run_ui_bypass
diff --git a/chrome/browser/first_run.h b/chrome/browser/first_run.h
index 3b2d996..3667ae3 100644
--- a/chrome/browser/first_run.h
+++ b/chrome/browser/first_run.h
@@ -11,6 +11,7 @@
#include app/gfx/native_widget_types.h
#include base/basictypes.h
#include chrome/browser/browser_process_impl.h
+#include googleurl/src/gurl.h
class CommandLine;
class FilePath;
@@ -63,6 +64,14 @@ class FirstRun {
int* do_import_items,
int* dont_import_items);
#endif // OS_WIN
+#if defined(OS_LINUX)
+ static bool ProcessMasterPreferences(const FilePath user_data_dir,
+ const FilePath master_prefs_path,
+ std::vectorGURL* new_tabs,
+ bool* homepage_defined,
+ int*